在前几天我们发布了一款名叫“我的硬件”的微信小程序,该小程序可通过拖拽控件的方式编辑界面,并支持蓝牙、MQTT等通信方式。用这块小程序可实现零基础制作属于自己的小程序去控制多个硬件。
思来想去觉得应该写几篇教程,我负责Arduino系列的制作分享,下面我们从点亮LED开始我们的智能硬件之旅。
二、准备工作 准备arduino开发板、蓝牙4.0模组、led灯若干。 微信搜索小程序——“我的硬件”或扫码下方二维码,打开备用。 三、编辑小程序界面由于篇幅限制,这里只展示编辑过程动态,具体制作教程请关注公众号“Hi iot”,里面有大量该小程序使用教程。
下图为界面制作完成的样子
由于我们使用的是蓝牙通信,所以在通信设置上选择蓝牙即可(蓝牙对接教程具体情况公众号“Hi-iot”蓝牙对接教程)。
小程序发送到硬件端的数据表格(具体可查小程序数据设置页面)
控件 | 控件ID | 打开输出 | 关闭输出 |
---|---|---|---|
switch0(红灯) | 020200 | {#020200:true} | {#020200:false} |
switch1(蓝灯) | 020201 | {#020201:true} | {#020201:false} |
switch1(绿灯) | 020202 | {#020202:true} | {#020202:false} |
switch1(黄灯) | 020203 | {#020203:true} | {#020203:false} |
switch1(白灯) | 020204 | {#020204:true} | {#020204:false} |
button0(获取电量值) | 020204 | “get”(用户自定义数据) |
我们的设计目标时,当以上五个switch开关打开或关闭时,Arduino控制的5个不同颜色的灯点亮或熄灭,按照小程序发送到硬件端的数据表格可以看出,我们只需要在接收到来自小程序发出的数据后,按照控件ID去解析数据的内容,通过判断“true”或“false”来控制LED点亮或熄灭。
//“我的硬件”数据解析函数
void wxxcx_analysis(String str)
{
String address = "";
String content = "";
int frist_index = 0;
int last_index = 0;
int end_index = 0;
//协议数据
while((frist_index = str.indexOf('#',frist_index+1))>0)
{
last_index = str.indexOf(':',last_index+1);
end_index = str.indexOf('}',end_index+1);
if(end_index<last_index)
{
continue;
}
if((last_index-frist_index)==7)//地址长度是否正确
{
address = str.substring(frist_index+1,last_index);//获取控件ID
content = str.substring(last_index+1,end_index);//获取控件内容
wxxcx_protocol_deal(address,content);
//Serial.println(content);
//对比控件ID
}
}
if(end_index==0){
//如果是按键的自定义数据则会到这,自行解析
wxxcx_general_deal(str);
}
}
通过调用 void wxxcx_analysis(String str) 函数将收到的数据分割为控件ID和控件内容,然后我们按照不同的控件ID去控制不同LED,示例如下:
//协议数据处理
void wxxcx_protocol_deal(String addr,String ctent)
{
if(addr == red)
{
if(ctent=="true")
{
digitalWrite(red_ledPin, HIGH); //点亮小灯
}
else
{
digitalWrite(red_ledPin, LOW); //熄灭小灯
}
}
else if(addr == blue)
{
if(ctent=="true")
{
digitalWrite(blue_ledPin, HIGH); //点亮小灯
}
else
{
digitalWrite(blue_ledPin, LOW); //熄灭小灯
}
}
else if(addr == green)
{
if(ctent=="true")
{
digitalWrite(green_ledPin, HIGH); //点亮小灯
}
else
{
digitalWrite(green_ledPin, LOW); //熄灭小灯
}
}
else if(addr == yellow)
{
if(ctent=="true")
{
digitalWrite(yellow_ledPin, HIGH); //点亮小灯
}
else
{
digitalWrite(yellow_ledPin, LOW); //熄灭小灯
}
}
else if(addr == white)
{
if(ctent=="true")
{
digitalWrite(write_ledPin, HIGH); //点亮小灯
}
else
{
digitalWrite(write_ledPin, LOW); //熄灭小灯
}
}
else if(addr == slider0)
{
//滑条的数据是十进制数,将 ctent 转为十进制即可
}
}
//非协议数据处理
void wxxcx_general_deal(String data)
{
int val = 0;
if(data=="get")//按键发送过来的自定义数据
{
val=analogRead(potpin);//读取模拟接口5 的值,并将其赋给val
wxxcx_send(vol,String(val));
}
}
当收到按键发送过来的“get”字符串后,返回一个ADC值
按照先前的{#控件ID:数据内容}格式发送回小程序即可
void wxxcx_send(String addr,String data)
{
String sendbuff = "{#"+addr+":"+data+"}";//格式:{#控件ID:内容}
Serial.print(sendbuff);
}
五、实验结果
微信小程序控制Arduino
到这里,我们通过Arduino控制LED灯就已经完成了,整个过程无需编写小程序端的代码,极大方便了电子DIY爱好者的开发周期。欢迎感兴趣的同学可添加我们的qq讨论交流群:635404055。 关注公众号“Hi iot”,回复“例程”即可获得本例程源码。
后面我们会持续更新更多微信小程序控制硬件系列教程,敬请关注!