Arduino接入OneNET云服务

作为开源三大硬件之一,     Arduino   应用已经非常广泛了,创客们使用Arduino开发了各种智能系统。而OneNET作为国内一流的云服务提供商,为开发者免费提供了云服务接入,而且接入接口是开放的,协议是开源的。那么我们如何把Arduino和OneNET结合起来实现智能系统云控制呢,这中间还需要一个联网模块,ESP8266作为性价比极高的WiFi模块就可以很方便的把两者连接起来。接下来我们就一起了解一下如何通过ESP8266使得Arduino实现云接入。
首先进行硬件连接,Arduino使用了中国版的Arduino MEGA 2560,WiFi模块使用了ESP-01S,ESP-01S的Rx和Tx分别连接到Arduino开发板的Tx1和Rx1,实现串口通讯;Arduino的3.3V和GND连接到ESP-01S,为模块供电。这里需要说明的是,Arduino的IO口是5V电平,ESP-01的IO是3.3V电平,但是ESP01的IO口是能够容忍5V电平的,所以直接把两个模块的RX和TX交叉相连也是没有问题的。

 Arduino接入OneNET云服务_设计制作_接口/总线/驱动


接下来开发板连接     USB   线到PC,在Arduino IDE中选择好开发板型号,串口号,IDE就能够连接到开发板了。
在写代码之前,先下载一个库,这个是用来驱动ESP-01的AT指令集库。
https://github.com/i     te   ad/ITEADLIB_Arduino_WeeESP8266

 Arduino接入OneNET云服务_设计制作_接口/总线/驱动


接下来就可以在Arduino IDE中编写代码了。

 Arduino接入OneNET云服务_设计制作_接口/总线/驱动


启动IDE后保存新建的文件到一个文件夹。

 Arduino接入OneNET云服务_设计制作_接口/总线/驱动


拷贝下载的库文件中的ESP8266.h和ESP8266.cpp到文件夹,之后开始编写代码。
首先引入ESP8266库的头文件:

#include "ESP8266.h"

然后定义一些变量:

#define SSID "Xiao     mi   _MU"#define PASSWORD "********"#define HOST_NAME "183.230.40.39"#define HOST_PORT (6002)int     ti   mer_cnt = 0; //     定时器   中断计数int senddata_flag = 0; //定时发送数据     标记   boolean ledStat = 0; //LED灯的状态String comdata = ""; //定义一个comdata     字符   串变量,赋初值为空值unsigned char sendbuff[100]; //发送缓冲区ESP8266 wifi(Serial1,115200); //声明一个wifi对象 在setup函数中初始化网络:

void setup(void){ Serial.begin(9600); //调试串口初始化 Serial.print("setup begin\r\n");     pi   nMode(13, OUTPUT); //LED灯初始化 Serial.print("FW Ve     rs   ion:"); Serial.println(wifi.getVersion().c_str());//获取ESP8266的固件版本 if (wifi.setOp     rToS   ta  TI on()) { //设置ESP8266状态 Serial.print("to sta  TI on ok\r\n"); } else { Serial.print("to sta  TI on err\r\n"); } if (wifi.joinAP(SSID, PASSWORD)) { //接入WIFI Serial.print("Join AP success\r\n"); Serial.print("IP:"); Serial.println( wifi.getLocalIP().c_str()); } else { Serial.print("Join AP f     ai   lure\r\n"); } if (wifi.disableMUX()) { Serial.print("single ok\r\n"); } else { Serial.print("single err\r\n"); } //连接到服务器 if (wifi.createTCP(HOST_NAME, HOST_PORT)) { Serial.print("create tcp ok\r\n"); } else { Serial.print("create tcp err\r\n"); } //这里应发送鉴权信息 LoginServer(); wifi.send((const uint8_t*)sendbuff, 60); Serial.print("Login Server OK!\r\n"); //创建定时器 noInterrupts();//禁用所有中断 TCCR1A = 0; TCCR1B = 0; //TCNT1 =  TI mer_init; TCCR1B |=(1 << CS12); //256分频 TIMSK1 |=(1 << TOIE1); //启用定时器溢出中断 interrupts();//允许所有中断 Serial.print("setup end\r\n");} 在初始化过程中使用了一个定时器,用来定时1秒钟产生一个中断。

ISR(TIMER1_OVF_vect) //1秒产生一次中断{ timer_cnt++; //中断次数累加 if(timer_cnt > 5) //5秒执行一次 { //digitalWrite(13, !digitalRead(13)); //点亮或者熄灭LED灯 timer_cnt = 0; //中断次数累计结果清空 senddata_flag = 1; //发送数据标记置位 }} 在中断函数中累计5次,也就是间隔5秒设置一次发送数据标记。

在循环函数loop中接收和发送数据。

void loop(void)  //主循环中定时发送开发板状态,并接收返回信息和下发指令
{
uint8_t buffer[128] = {0};
comdata = "";

uint32_t len = wifi.recv(buffer, sizeof(buffer), 100);
if (len > 0) {
Serial.print("Received:[");
for(uint32_t i = 0; i < len; i++) {
Serial.print((char)buffer[i]);
if(i>40)
{
comdata+=(char)buffer[i];
}
}
Serial.print("]\r\n");
}
if (len > 40)  //大于40个字符,认为是下发指令,
{
//对于下发指令进行处理
if(comdata.indexOf("led:0")!= -1)
{
//熄灭led
ledStat=false;
}else if(comdata.indexOf("led:1")!=-1)
{
//点亮led
ledStat=true;
}else
{
//异常数据丢弃即可
}

}

digitalWrite(13, ledStat);

if(senddata_flag == 1)
{
SendData();
wifi.send((const uint8_t*)sendbuff, 21);
Serial.print("Sended LED state!\r\n");
senddata_flag=0;
}
delay(50);
}

 Arduino接入OneNET云服务_设计制作_接口/总线/驱动


代码完成后编译执行,在串口调试窗口就可以看到开发板的输出日志了。

 Arduino接入OneNET云服务_设计制作_接口/总线/驱动


此时手机可以通过app控制Arduino开发板上的led灯的量灭了。

总结:Arduino的开发板由于封装了底层技术细节,对于应用者来说只需编写很少的代码就能实现功能,非常方便;ESP8266作为性价比非常高的WIFI模块控制起来也很方便;OneNET服务器免费为开发者提供了云接入服务,而且接入协议是开源的,任何人都可以方便的接入。三者结合,就是一套完整的物联网接入解决方案,给开发人员带来了极大的方便。

完整代码可以访问如下地址获取:
https://gitee.com/jamieyy/codes/08jgk3rmys72cltd9haiv30

5
199
0
66

相关资讯

  1. 1、Win10键盘被锁了怎么解锁?Win10锁键盘了怎么办?2672
  2. 2、蚂蚁财富能买股票吗?蚂蚁财富买股票教程1041
  3. 3、精彩投屏如何使用?精彩投屏的使用方法841
  4. 4、快剪辑专业模式怎么开启?快剪辑专业模式启用方法2740
  5. 5、ae画面如何添加快速模糊效果?ae画面添加快速模糊效果的方法步骤2428
  6. 6、超级转换秀怎么进行卸载?超级转换秀卸载方法692
  7. 7、换新苹果了怎么传数据?iPhone数据传输技巧分享2064
  8. 8、如何安装Yanderify软件?5135
  9. 9、钉钉圈子如何创建?钉钉电脑版圈子创建流程简述4677
  10. 10、笔记本3060比2060性能高多少?笔记本2060和3060的性能区别4349
全部评论(0)
我也有话说
0
收藏
点赞
顶部