#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\r\n"); pinMode(13, OUTPUT); //LED灯初始化 Serial.print("FW Version:"); Serial.println(wifi.getVersion().c_str());//获取ESP8266的固件版本 if (wifi.setOprToStation()) { //设置ESP8266状态 Serial.print("to station ok\r\n"); } else { Serial.print("to station 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 failure\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 = timer_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秒设置一次发送数据标记。
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);
}
代码完成后编译执行,在串口调试窗口就可以看到开发板的输出日志了。
此时手机可以通过app控制Arduino开发板上的led灯的量灭了。
总结:Arduino的开发板由于封装了底层技术细节,对于应用者来说只需编写很少的代码就能实现功能,非常方便;ESP8266作为性价比非常高的WIFI模块控制起来也很方便;OneNET服务器免费为开发者提供了云接入服务,而且接入协议是开源的,任何人都可以方便的接入。三者结合,就是一套完整的物联网接入解决方案,给开发人员带来了极大的方便。
完整代码可以访问如下地址获取:
https://gitee.com/jamieyy/codes/08jgk3rmys72cltd9haiv30
原创作品,未经权利人授权禁止转载。详情见转载须知。 举报文章
我要举报该内容理由
×