四博智联产品售后

 找回密码
 立即注册
搜索
查看: 13735|回复: 0

基于ESP8266串口WiFi扩展板上传数据到服务器和反向控制

[复制链接]

0

主题

0

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2015-12-30 18:52:17 | 显示全部楼层 |阅读模式

基于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。

1.3 阅读上传协议地址:http://bbs.doit.am/forum.php?mod=forumdisplay&fid=46
平台基于TCP通讯,服务器IP: iot.doit.am 端口:8810
平台采用key,进行用户验证,key通过 http://iot.doit.am 获得。
1.数据上传:
cmd=upload&device_name=arduino&data=126&uid=demo&key=c514c91e4ed341f263e458d44b3bb0a7\\r\\n
应答:
cmd=upload&res=1
通过 http://iot.doit.am可以实时查看。

2.控制设备:
  a)先订阅自己的用户id
      cmd=subscribe&topic=demo \\r\\n
    应答:cmd=subscribe&res=1

b)通过 http://iot.doit.am发送控制命令。
c)设备得到命令:
cmd=publish&device_name=humidity&device_cmd=poweron

二上传数据到服务器2.1 arduino程序

Arduino uno烧写下列程序。
  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   randomSeed(analogRead(0));
  5. }
  6. void loop()
  7. {
  8.     delay(1000);
  9.      Serial.print(\"cmd=upload&device_name=arduino&data=\");
  10.      Serial.print(random(1000));//send a random number
  11.      Serial.println(\"&uid=doit_demo&key=a4b4c7cbc8685cc5309d60647cae546b\");
  12. }
复制代码

上述程序的功能是向服务器发送随机数。randomSeed(analogRead(0))产生一个随机数种子。
在loog()函数中的三条Serial.print()是向device_name为arduino的设备发送数据。这里用到了用户的uid和key。
2.2 ESP8266透传模拟配置
配置esp8266透传模块。
透传模块教程:
http://bbs.doit.am/forum.php?mod=viewthread&tid=176&page=1&extra=#pid208

配置ESP8266连接到无线路由器。配置其在STA工作模式,TCP Client连接,远程IP填写为:
iot.doit.am。端口为8810。

2.3 运行查看将ESP12E Shield的SW1拨码开关均拨到ON位置。启动arduino。
稍等片刻,可以在服务器上看到上传的数据。
通过DataList查看:


通过DataDisplay查看:




三反向控制3.1 arduino程序

Arduino uno反向控制程序。
  1. unsigned long MS_TIMER=0;
  2. unsigned long lastMSTimer=0;
  3. String comdata = \"\";
  4. char flag=false;
  5. void setup()
  6. {
  7.   Serial.begin(9600);
  8.   pinMode(2,OUTPUT);
  9.   MS_TIMER=millis();
  10. }
  11. void loop()
  12. {

  13.   if(flag == false)
  14.   {
  15.     if(millis() - MS_TIMER> 5000)
  16.     {
  17.       Serial.println(\"cmd=subscribe&topic=doit_demo\");
  18.       MS_TIMER = millis();
  19.     }
  20.   }
  21.   if (Serial.available() > 0)  
  22.   {
  23.     //comdata = char(Serial.read());
  24.     comdata += char(Serial.read());
  25.     lastMSTimer  = millis();
  26.     delay(5);
  27.   }
  28.   if(comdata.length()>0&& millis() - lastMSTimer > 100)
  29.   {
  30.     if(comdata.compareTo(\"cmd=subscribe&res=1\\r\\n\")==0)
  31.        flag = true;
  32.     else if(comdata.compareTo(\"cmd=publish&device_name=arduino&device_cmd=d2 on\\r\\n\")==0)
  33.         digitalWrite(2, HIGH);
  34.     else if(comdata.compareTo(\"cmd=publish&device_name=arduino&device_cmd=d2 off\\r\\n\")==0)
  35.         digitalWrite(2, LOW);
  36.     comdata = \"\";
  37.   }
  38. }
复制代码


3.2 ESP8266透传模块配置

本节同2.2节。

3.3 网页控制

利用一个发光二极管接到Arduino UNO D2管脚(阳极接D2、阴极接GND)。
将ESP12E Shield的SW1拨码开关均拨到ON位置。启动ARDUINO。
登陆账号进行控制。如下图所示。输入“d2 on”打开LED,或者输入“d2 off”关闭LED。实现远程控制。





实际效果照片:
关闭LED状态:


打开LED状态:


其他链接:


来源: 基于ESP8266串口WiFi扩展板上传数据到服务器和反向控制
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|四博智联 Inc. ( 粤ICP备15034758号-1

GMT+8, 2024-3-19 17:27 , Processed in 0.057898 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表