所有关于电路
行业的文章

用blynk创建一个聪明的家

2017年6月1日通过Antonio Martinez,Silego

本文介绍了如何使用Silego GreenPak和Blynk应用程序设计基本智能家居系统的原型。

建立Silego GreenPak与称为Blynk的智能手机应用程序之间的连接创建了一个基本的智能家庭系统。

控件控制所有连接的下游组件格林帕克设备,可配置的混合信号IC(CMIC.)。Blynk是一个兼容iOS和Android智能手机的平台。它可以与各种微控制器交互(如Arduino, NodeMCU,树莓派,Beaglebone黑,粒子光子等)。它是为物联网(Internet of Things)而设计的,能够远程控制硬件,并存储/显示来自传感器的任何所需项目的数据。Blynk对于那些不具备创建复杂智能手机应用所需知识水平,或需要快速物联网原型的人来说是理想的选择。

如图1所示,智能家庭结构作为双向网络工作。它可以用两个简单的一般例子解释:

图1.智能家居架构。

控制输出组件:

如果用户希望打开家中的灯泡,他们只需按下与灯泡相关的按钮。生成请求后,布尔数据(LOW或HIGH)发送到Blynk服务器,后者告诉Arduino将灯泡打开。Arduino然后处理数据,并开始I2C传输到Silego GreenPAK (SLG46538V.在这种情况下,它可以与之类似地工作SLG46537V.,SLG46533V.和其他常见的Greenpaks异步状态机(ASM))。寄存器0xF4的值改为0x01,将寄存器I2C块虚拟输出的第一位变为HIGH。这同时与7针(灯泡)联系在一起医生设计它迫使数字输出引脚到HIGH,通过一个电路来激活继电器。当应用程序的按钮小部件中的按钮被取消时,输出被关闭。

监控输入传感器:

让我们假设在每个人睡觉的时候,入侵者决定通过窗户进入房子。一旦他们尝试打开窗口,将打开警报和特定灯(它在GP设计中设置了这种方式)。Arduino将经常通过I2C(读取寄存器0xF0)监控所有GP5的连接传感器,因此它将检测寄存器值的变化。如在我们的情况下,该值将是0x08,这将意味着数字输入引脚4处于活动状态,这将最终打开窗口小部件并向应用程序发送通知,提示用户提供安全性。

Blynk应用程序

下载应用程序,然后单击此链接:http://docs.blynk.cc/。任何人都可以创建自己的blynk帐户。出于此应用笔记的目的,已创建具有带有某些按钮,LED,选项卡,电子邮件,通知,滑块,仪表,图形和历史图表的项目。(图2)。

图2。Blynk.智能手机HMI。

从那里开始,只需配置引脚(直接硬件引脚,或者在本项目中的虚拟引脚),以及每个窗口小部件的其他一些选项,以获取人机界面(HMI)准备运行目标项目。

小部件的理由:

  • 按钮:有两个按钮:一个激活灯泡,另一个激活报警蜂鸣器,两者都是独立的。
  • LED:有四种LED小部件,指示每个传感器的状态,例如:移动传感器(如M.S.),门铃按钮(D.B.B.),门传感器(D.S.)和窗口传感器(W.S.)
  • 选项卡:启用可选的选项卡来更好地组织小部件。
  • 电子邮件:启用电子邮件通知
  • 通知:启用智能手机通知
  • 滑块:一个滑块,用于在GP设计中设置CNT6 / DLY6的计数器数据值(在这种情况下为248)
  • 水位计:显示家中水箱水位的一个水位计
  • 图表:一个图表显示家庭坦克水平(与仪表小部件相同)。
  • 历史图:显示水箱水位在时间上的数据统计(数据存储时间从小时到月)

通知事件:

支持两种通知:电子邮件通知和智能手机通知(你也可以添加twitter通知)。您需要将通知小部件添加到应用程序中,并从Arduino IDE上的Blynk库编写正确的函数,以启用通知模块。参见图3。

图3.通知示例。

ESP8266无线模块

ESP8266是具有完整TCP / IP堆栈和微控制器单元功能的Wi-Fi芯片。通过某些库和协议,您不仅可以实现与硬件的沟通,还可以通过UART协议使用UART协议,通过UART协议,通过芯片内的命令进行预编程来实现稳定。

有很多类型的ESP8266模块,但是对于这个项目,正在使用ESP8266-01。它连接到Arduino,如图4所示:

图4. Arduino Mega和ESP8266接线图。

Wi-Fi模块使用3.3V电平,因此有两个选项:图4显示的是更简单的一个。它包括将ESP8266的VDD引脚连接到Arduino的3.3V引脚,Arduino的TX连接到一个分压器(将5v转换为3.3V),然后将输出电压电平连接到模块的RX引脚。另一种选择是购买一个电压电平转换芯片(或者3.3V电源板)来为ESP8266电路供电。

Blynk库将通过AT命令获得控制整个模块的请求:从连接到您家里的WLAN,到发送和接收您需要的任意数据字节。

SLG46538V中的I2C协议是多种项目的工具。为此,GreenPak ASM用作I / O引脚延伸,几乎留下了Arduino免费的所有引脚。有一些应用笔记可用(例如AN-1107.AN-1090.),I2C解释得很好。几乎所有的greenpak设备硬件可以从I2C控制:配置一个通用的微控制器为主,而GreenPAK为从。通过I2C,发送一些字节命令,引脚,ASM RAM,计数器,LUT和GreenPAK中的许多其他元素都可以读写。

GreenPak设计基于GPIO引脚,I2C协议工具块连接。自动家庭中的移动传感器,门传感器,窗口传感器和门铃按钮等数字输入分别与引脚2,3,4和5相关联。它们可以很容易地从I2C工具读取,也可以使用门(LUTS)设计,触发项目中包含的一个或两个数字输出。例如,当按下门铃按钮时,它将激活警报以模拟门铃声音。当移动传感器检测到某人时,它会打开灯(在房间里模拟某人)。最后,如果门传感器或窗扇传感器(通过霍尔效应)检测到一些入侵者,它们将同时触发警报和灯光。

还有一个调光灯泡在引脚10,连接到两个计数器有这个引脚作为PWM输出,其中CNT0/DLY0设置频率(100Hz)和CNT6/DLY6设置脉冲宽度从0到255。然而,有一个大约3%的误差范围来设置输出宽度,所以建议发送字节从0到248从Blynk应用程序,以获得一个伟大的PWM。

此外,部分超声波传感器电路由GreenPAK ASM控制。它通过两个计数器控制模块的触发脉冲:CNT3/DLY3来设置频率(10Hz), CNT4/DLY4来设置激活传感器电路过程所需的脉冲宽度,从而产生一个“回波”输出,由Arduino板接收来处理数据。

I2C模块默认连接8脚(SCL)和9脚(SDA)。设备地址是0x00,但也可以设置从0x00到0xF的任何其他地址。重要的是要知道(基于SLG46538V datasheet), I2C写帧由一个开始位、一个控制字节、字地址、数据和一个停止位组成(图7插图)。I2C读帧由起始位、控制字节、字地址、起始位(再次)、控制字节、数据和结束传输的停止位组成(查看应用程序注释AN-1090了解I2C如何工作的更多信息)。

Arduino代码

对于Arduino(从硬件角度来看),除了Wi-Fi模块的连接之外,没有什么需要更新的。超声波传感器的回波引脚输出连接Arduino的数字输入引脚12。通过这种方式Arduino可以处理回波脉冲数据。

关于Arduino Code Design,使用一些图书馆,解决了许多东西,使编程更容易。这些库是:“esp8266_lib.h”,“blynksimpleshieldesp8266.h”,“simpetimer.h”和“silego.h”。代码很好地评论并解释(通过下载Arduino文件来检查它)。一些一般的事情是解释:

//您应该在Blynk应用程序中获取Auth令牌。//转到项目设置(螺母图标)。char auth [] =“yourauthtoken”;//替换“yourauthtoken”进行Blynk项目//您的WiFi凭据的令牌编号。//将密码设置为“”开放网络。char ssid [] =“您的网络名称”;//替换“yournetwokname”,以获取您的网络字符的名称[] =“yourpassword”;//替换WiFi密码的“yourpassword”

要在家中安装项目,必须键入auth令牌编号。要找到它,只需打开Blynk应用程序,使用您的帐户登录(如果您没有创建一个,只需注册),请创建一个项目,然后转到项目设置。在那里,可以看到Auth令牌编号(检查图10中的示例)。找到它后,只需在Arduino代码中键入数字,或更容易地制作内容,将该代码发送到您的电子邮件。然后它可以刚刚在PC中复制和粘贴。此外,还必须键入WLAN的名称和密码,作为任何其他基于Wi-Fi的电子设备。

图6.项目设置。

如果需要使用应用程序中的LED小部件,则只需在Arduino代码中添加多个小植物对象。对于此应用笔记,已添加用于构建项目的所有传感器。

还有其他重要的对象来定义eSp8266库类和从简单计时器类的eSP8266库类和计时器的诸如Wi-Fi。

此外,必须定义GreenPak ASM的地址,在这种情况下,0x00。

ESP8266 wifi (&EspSerial);WidgetLED movementSensor (V2);//在Blynk WidgetLED门传感器(V3)上使用虚拟大头针创建小部件;//有一个大的虚拟引脚可以使用WidgetLED windowSensor(V8);WidgetLED doorBellButton (V4);SimpleTimer定时器;Silego Silego (0 x00);// GreenPAK ASM I2C从地址

如果必须将任何值从应用程序写入虚拟引脚,则建议使用它的方式一个名为BLYNK_WRITE(虚拟引脚名)的函数,用来知道要从Blynk读取的虚拟引脚。然后必须在函数中输入pin的名称作为参数。这样,必须在函数中调用param.asInt(),该函数返回一个整数值(也可以是字节或布尔值),必须对其进行处理,以创建一个触发器来执行代码中的其他句子。

BLYNK_WRITE(V0) //按钮部件写入pin V0 {int statusBulb = param.asInt();//保存灯泡状态,如果(statusBulb) {silego. conf;xf4 writeI2C (0, 0 x01);//设置GP5的引脚7 HIGH (Light Bulb)通过GP Design中的虚拟引脚0}else {silego。xf4 writeI2C (0, 0 x00);//清除寄存器0xf4(所有虚拟输入)}}

在使用Blynk与Arduino使用Blynk时非常重要,以留下vlynk.run()函数,如果可能的话,避免任何类型的长毫秒延迟()。这可能会停止arduino和blynk之间的通信,或延迟数据传输。However, it is always desirable to add some other features to the Arduino code in addition to what the app services offers, and that’s why timer.setInterval(milliseconds, functionToExecute) from “SimplerTimer.h” function is used in the code’s setup, to check a general purpose project function that’s needed to execute it to add other features. For this example it is timer.setInterval(100L, readInputs), that means for each 100 milliseconds, Arduino will run the function readInputs().

void setup() {pinMode(echo, INPUT);//设置控制台波特率Serial.begin(74880);//任何波特率期望的延迟(10);//设置ESP8266波特率EspSerial.begin(ESP8266_BAUD);//波特率延迟(10)74880;Blynk。开始(auth, wifi, ssid, pass);// ESP8266连接wifi网络//然后使用Blynk servers定时器。setInterval (100 l, readInputs);}

readInput()函数是该项目中最重要的函数之一,因为它用I2C工具读取GreenPAK数字输入,然后评估返回的字节数,以知道激活了哪个传感器。一旦Arduino知道它读取的是什么传感器,它就会通过写入之前设置的虚拟数字对象来触发(打开)相关的LED小部件。这样,当传感器检测到一些东西时,用户可以通过检查应用,但这也会触发一些通知与Blynk.notification()函数;例如Arduino读取GreenPAK ASM,知道运动传感器检测到某人,所以它会触发movementSensor.on(),并向智能手机发送一个通知,说“客厅里有人”。

void readInputs() {readingByte = silego.readI2C(0xf0);//读取与0xf0寄存器开关相关的输入引脚(readingByte) {case 0x02: //如果输入引脚2是HIGH movementSensor.on();// Blynk的运动传感器部件LED是ON doorSensor.off();windowSensor.off ();doorBellButton.off ();Blynk。通知(“有人在客厅”);//发送通知到你的智能手机;case 0x04: //如果输入引脚3是HIGH movementSensor.off();doorSensor.on (); // Blynk's door sensor widget LED is ON windowSensor.off(); doorBellButton.off(); Blynk.notify("ALERT. An intruder opened the Door"); // Sends the notification to your smartphone delay(10); Blynk.email("your_email@mail.com", "ALERT", "An intruder opened the Door"); // Sends the notification to your email break;

最后,此功能还读取超声波回声引脚,通过名为PulsiN()的函数,测量回声脉冲在微秒内保持高位,然后将该时间转换为厘米,使用以下公式:距离=微秒/ 58(检查应用笔记N-1050了解超声波传感器如何工作的更多信息);一旦距离值是已知的,Blynk.virtualwrite()函数用于在blynk上写下任何虚拟。对于此智能家庭设计模块,距离值被发送到虚拟引脚6和7,其中虚拟引脚6与仪表窗口小部件相关联,并将7到APP中的图形小部件,以显示该变量的行为方式(模拟坦克的水位通过距离)。

//这部分涵盖超声波的回声脉冲处理持续时间=脉冲(回声,高);//计数时间echo引脚以微秒为高,并保存距离=持续时间/ 58;//将该时间持续时间转换为厘米,所以我们可以知道//水箱中的水和传感器之间的距离,所以这将计算家里的水箱中的水,如果你//将其放在坦克的顶部,朝向水blynk.virtualwrite(v6, 距离);//它将距离值发送到两个不同的虚拟引脚,用于X目的blynk.virtualwrite(v7,距离);//内部Blynk应用程序if(距离> 100和距离<150){blynk.notify(“坦克水平低于50%”);//将通知发送到智能手机}如果(距离> 160和距离<200){blynk.notify(“坦克级别低于20%”);//将通知发送到您的智能手机}}

关于坦克的水平通知,使用了一些基本条件:当水位低时,当水位较低时,介于100-150厘米之间(这意味着水位低于50%)。此外,当它在160-200cm之间时,水位低于20%。

注意:为了更轻松地模拟水箱级,在视频演示中发生水位通知的那一刻;因此,当水在100-50厘米之间时,水位低于50%;当它在40-0厘米之间时,水位低于20%。可以观察到,即在项目视频中的模拟演示中倒置了条件。

GPIO相关电路原理图

在灯泡的数字输出上应用了一个普通的隔离电路(带有光耦合器和一个5V继电器,在常开引脚上有120VAC输出)。(见图8)

对于其余的电路,传感器作为数字输入直接连接到GreenPAK ASM。其他数字输出(如蜂鸣器和LED)直接与一些基本电阻连接以保护它们。

结论

GreenPak ASM芯片是一种有效的设备,用于利用智能家居系统的设计。想象一下,将十六(16)个GreenPak设置为由主微控制器控制的从设备,可以使用该系统控制多少传感器和元素?即使是整个建筑也可以在具有非常低成本的解决方案的许多方面控制(至少来自系统架构中的控制器部分)。

B.O.M和工具

项目中使用的组件和工具有:

其他组件和工具:

  • LED
  • 抗性
  • 5 v继电器
  • PNP和NPN普通晶体管
  • 按钮
  • 杜邦电缆

行业文章是一种允许行业合作伙伴与All About Circuits读者分享有用的新闻、信息和技术的内容形式,而编辑性内容并不适合这种形式。所有行业文章都受到严格的编辑指导方针,目的是为读者提供有用的新闻,技术专长,或故事。Industry Articles中所表达的观点和观点是合作伙伴的观点和观点,不一定是All About Circuits或其作者的观点和观点。

1评论