作为开源三大硬件之一,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交叉相连也是没有问题的。
接下来开发板连接usb线到pc,在arduino ide中选择好开发板型号,串口号,ide就能够连接到开发板了。
在写代码之前,先下载一个库,这个是用来驱动esp-01的at指令集库。
https://github.com/itead/iteadlib_arduino_weeesp8266
接下来就可以在arduino ide中编写代码了。
启动ide后保存新建的文件到一个文件夹。
拷贝下载的库文件中的esp8266.h和esp8266.cpp到文件夹,之后开始编写代码。
首先引入esp8266库的头文件:
#include esp8266.h
然后定义一些变量:
#define ssid xiaomi_mu#define password ********#define host_name 183.230.40.39#define host_port (6002)int timer_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
); pinmode(13, output); //led灯初始化 serial.print(fw version:); serial.println(wifi.getversion().c_str());//获取esp8266的固件版本 if (wifi.setoprtostation()) { //设置esp8266状态 serial.print(to station ok
); } else { serial.print(to station err
); } if (wifi.joinap(ssid, password)) { //接入wifi serial.print(join ap success
); serial.print(ip:); serial.println( wifi.getlocalip().c_str()); } else { serial.print(join ap failure
); } if (wifi.disablemux()) { serial.print(single ok
); } else { serial.print(single err
); } //连接到服务器 if (wifi.createtcp(host_name, host_port)) { serial.print(create tcp ok
); } else { serial.print(create tcp err
); } //这里应发送鉴权信息 loginserver(); wifi.send((const uint8_t*)sendbuff, 60); serial.print(login server ok!
); //创建定时器 nointerrupts();//禁用所有中断 tccr1a = 0; tccr1b = 0; //tcnt1 = timer_init; tccr1b |=(1 << cs12); //256分频 timsk1 |=(1 < 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 40)
{
comdata+=(char)buffer[i];
}
}
serial.print(]
);
}
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!
);
senddata_flag=0;
}
delay(50);
}
代码完成后编译执行,在串口调试窗口就可以看到开发板的输出日志了。
此时手机可以通过app控制arduino开发板上的led灯的量灭了。
总结:arduino的开发板由于封装了底层技术细节,对于应用者来说只需编写很少的代码就能实现功能,非常方便;esp8266作为性价比非常高的wifi模块控制起来也很方便;onenet服务器免费为开发者提供了云接入服务,而且接入协议是开源的,任何人都可以方便的接入。三者结合,就是一套完整的物联网接入解决方案,给开发人员带来了极大的方便。
完整代码可以访问如下地址获取:
https://gitee.com/jamieyy/codes/08jgk3rmys72cltd9haiv30
英伟达挖走小鹏自动驾驶“第一功臣”
基于ICE2QS02G的液晶电视开关电源设计
一文看懂:一体化压铸件气密性检测方案
名词解释:阻塞是什么意思?
华为助力运营商建设高品质5G网络
Arduino接入OneNET云服务
餐饮行业进入“微利时代”普渡机器人助力突破成本桎梏
广东联通携手碧桂园开创了基于5G+MEC技术的物业与工地管理项目
光伏新能源持续走热,为何这款工业连接器频频被光伏厂商相中?
一文浅谈智慧林业
比特大陆ANTBOX移动矿场体验 可争取更多的时间获得收益
全新MIUI13聚焦基础体验 流畅度最高提升52%
永磁无刷直流电机的设计、控制、生产制造及应用
你了解仪器设备幅值吗
如果云服务宕机,智能门禁系统将会怎样
苹果将推三款不同尺寸iPad,库克:iPad销量很快会恢复增长
联想Z5 Pro官方披露,将是百分百全面屏和屏下指纹设计
技嘉X470 AORUS GAMING 7 WIFI主板评测
网络IO模型:阻塞与非阻塞
数字资产区块链交易平台开发永续合约交易所搭建