基于ESP8266串口WiFi扩展板上传数据到服务器和反向控制
一 准备工作 1.1 硬件准备 1.2 上传账号以及API Key 1.3 阅读上传协议 二 上传数据到服务器 2.1 arduino程序 2.2 ESP8266透传模拟配置 2.3 运行查看 三 反向控制 3.1 arduino程序 3.2 ESP8266透传模块配置 3.3 网页控制
关键词:arduino、esp8266、透传、反向控制
本案例详细介绍利用arduino uno和esp8266透传模块上传数据到服务器,同时从服务器反向发送指令实现对arduino的控制。
一准备工作1.1 硬件准备Arduino UNO一块
ESP12E Shield一块
购买连接:
https://item.taobao.com/item.htm ... Vvb&id=520583000610
1.2 上传账号以及API Key在doit的云平台上申请一个账号。
申请地址: http://iot.doit.am。
记住自己的账号(Uid)和密码(Passoword)
登陆可以看到默认界面
按照下图获取API的Key,用于上传数据。
Arduino uno烧写下列程序。 - void setup()
- {
- Serial.begin(9600);
- randomSeed(analogRead(0));
- }
- void loop()
- {
- delay(1000);
- Serial.print("cmd=upload&device_name=arduino&data=");
- Serial.print(random(1000));//send a random number
- Serial.println("&uid=doit_demo&key=a4b4c7cbc8685cc5309d60647cae546b");
- }
复制代码
上述程序的功能是向服务器发送随机数。randomSeed(analogRead(0))产生一个随机数种子。
在loog()函数中的三条Serial.print()是向device_name为arduino的设备发送数据。这里用到了用户的uid和key。
2.2 ESP8266透传模拟配置
Arduino uno反向控制程序。 - unsigned long MS_TIMER=0;
- unsigned long lastMSTimer=0;
- String comdata = "";
- char flag=false;
- void setup()
- {
- Serial.begin(9600);
- pinMode(2,OUTPUT);
- MS_TIMER=millis();
- }
- void loop()
- {
- if(flag == false)
- {
- if(millis() - MS_TIMER> 5000)
- {
- Serial.println("cmd=subscribe&topic=doit_demo");
- MS_TIMER = millis();
- }
- }
- if (Serial.available() > 0)
- {
- //comdata = char(Serial.read());
- comdata += char(Serial.read());
- lastMSTimer = millis();
- delay(5);
- }
- if(comdata.length()>0&& millis() - lastMSTimer > 100)
- {
- if(comdata.compareTo("cmd=subscribe&res=1\r\n")==0)
- flag = true;
- else if(comdata.compareTo("cmd=publish&device_name=arduino&device_cmd=d2 on\r\n")==0)
- digitalWrite(2, HIGH);
- else if(comdata.compareTo("cmd=publish&device_name=arduino&device_cmd=d2 off\r\n")==0)
- digitalWrite(2, LOW);
- comdata = "";
- }
- }
复制代码
3.2 ESP8266透传模块配置
本节同2.2节。
3.3 网页控制
利用一个发光二极管接到Arduino UNO D2管脚(阳极接D2、阴极接GND)。
将ESP12E Shield的SW1拨码开关均拨到ON位置。启动ARDUINO。
登陆账号进行控制。如下图所示。输入“d2 on”打开LED,或者输入“d2 off”关闭LED。实现远程控制。
其他链接:
|