文章目录

  • 1 思维图概览
  • 2 阿里云—>ESP8266 部分
  • 3 ESP8266—>ArduinoUno开发板 部分
  • 4 ArduinoUno开发板—>LED灯 部分
  • 5 云端体验控制

1 思维图概览

需要实现的有

  • ESP8266通过wifi与阿里云进行通信
  • ESP8266与Arduino Uno开发板的通信
  • Arduino Uno开发板与LED灯的通信
#mermaid-svg-ZSpgyxlEdloVmytQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZSpgyxlEdloVmytQ .error-icon{fill:#552222;}#mermaid-svg-ZSpgyxlEdloVmytQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZSpgyxlEdloVmytQ .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ZSpgyxlEdloVmytQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZSpgyxlEdloVmytQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZSpgyxlEdloVmytQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZSpgyxlEdloVmytQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZSpgyxlEdloVmytQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZSpgyxlEdloVmytQ .marker.cross{stroke:#333333;}#mermaid-svg-ZSpgyxlEdloVmytQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZSpgyxlEdloVmytQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZSpgyxlEdloVmytQ .cluster-label text{fill:#333;}#mermaid-svg-ZSpgyxlEdloVmytQ .cluster-label span{color:#333;}#mermaid-svg-ZSpgyxlEdloVmytQ .label text,#mermaid-svg-ZSpgyxlEdloVmytQ span{fill:#333;color:#333;}#mermaid-svg-ZSpgyxlEdloVmytQ .node rect,#mermaid-svg-ZSpgyxlEdloVmytQ .node circle,#mermaid-svg-ZSpgyxlEdloVmytQ .node ellipse,#mermaid-svg-ZSpgyxlEdloVmytQ .node polygon,#mermaid-svg-ZSpgyxlEdloVmytQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZSpgyxlEdloVmytQ .node .label{text-align:center;}#mermaid-svg-ZSpgyxlEdloVmytQ .node.clickable{cursor:pointer;}#mermaid-svg-ZSpgyxlEdloVmytQ .arrowheadPath{fill:#333333;}#mermaid-svg-ZSpgyxlEdloVmytQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZSpgyxlEdloVmytQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZSpgyxlEdloVmytQ .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ZSpgyxlEdloVmytQ .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ZSpgyxlEdloVmytQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZSpgyxlEdloVmytQ .cluster text{fill:#333;}#mermaid-svg-ZSpgyxlEdloVmytQ .cluster span{color:#333;}#mermaid-svg-ZSpgyxlEdloVmytQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZSpgyxlEdloVmytQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

wifi
物理连接
物理连接
ESP8266
阿里云物联网平台
ArduinoUno开发板
LED灯

2 阿里云—>ESP8266 部分

参考昨天的文章

  • 【阿里云】物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信
    https://blog.csdn.net/qq_33957603/article/details/124575451

参考的AT指令

AT+RST
AT+RESTORE
AT+CWMODE=1
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
AT+CWJAP="WiFi名字","WiFi密码"
AT+MQTTUSERCFG=0,1,"NULL","用户名","密码",0,0,""
AT+MQTTCLIENTID=0,"ClienId"    //clientId第二个参数注意每个逗号后加分隔符“\”,例如:t|securemode=3\,signmethod=hmacsha1\,
AT+MQTTCONN=0,"连接域名",1883,1    //连接域名中的端口号已经被提到后面了,所以删去“:1883”

3 ESP8266—>ArduinoUno开发板 部分

ArduinoUno软件官网下载

  • https://www.arduino.cc/en/software

串口接受到的云端数据(含物模型格式)

+MQTTSUBRECV:0,"/sys/xxxxxx/xxx/thing/service/property/set",100,{"method":"thing.service.property.set","id":"xxxxx","params":{"powerstate":1},"version":"1.0.0"}

参考代码
AT指令部分请用阿里云连接ESP8266的部分进行替换


/* 连接LOT的AT指令,可修改WIFI和三元组 */
//#define AT_1 "AT+RST"    //AT重启指令暂时不用
//#define AT_2 "AT+RESTORE"
#define AT_3 "AT+CWMODE=1"
#define AT_4
#define AT_5
#define AT_6
#define AT_7
#define AT_8 #include <ArduinoJson.h>    //JOSN字符串库
#include <SoftwareSerial.h>
SoftwareSerial softSerial1(10,11); //定义软串口1与音乐播放器模块通信
const int LED = 7;  //灯的引脚int Json_isTopic(String espjson);
void Serial_Transfer();
int Aliyun_Connect();
String Json_Extraction(String espjson);
int Json_Parse(String Json,int* LightSwitch);String espstring;
int LightSwitch = 0;void setup()
{Serial.begin(9600);             //与电脑连接的硬串口一般不建议连接其他设备softSerial1.begin(9600);            //定义为softSerial1串口专门与esp8266连接  "AT+UART_DEF=9600,8,1,0,0"已经把esp8266波特率改成9600softSerial1.listen();pinMode(LED,OUTPUT);            //小灯泡引脚设置Aliyun_Connect();          //阿里云连接函数 }void loop()
{if(softSerial1.available()){                             //注意串口容易丢失数据,要保证loop函数准确espstring = softSerial1.readString();                     //使用.readString()可以直接读取全部串口内容,可以不需要循环了(但是实际上有点不稳定,需要一个循环)Serial.println(espstring);Json_isTopic(espstring);}
}int Json_isTopic(String espjson){int left = 0;for(int i = 0; i < espjson.length(); i++){if(espjson[i]=='{'){left = i; break;}}espjson = espjson.substring(left,espjson.length() - 1);  Serial.println(espjson);if(espjson == "ERRER"){return -1;}Json_Parse(espjson,&LightSwitch);     //读取Json字符串变量Serial.println(LightSwitch);digitalWrite(LED,LightSwitch);return 0;
}/* AT反馈字符串提取JSON字符串函数 */
//String Json_Extraction(String espjson){   //从espjson里提取出Json字符串再return回去赋值,如果错误则出"ERRER"
//  int Json_Left = 0; int Json_Right = 0; int Json_Bracket = 1;            //定义Json字符串的左边界、右边界、括号数量变量
//  while(Json_Left < espjson.length() - 1 and espjson[Json_Left] != '{'){Json_Left +=1;}   //历遍espjson直到第一个'{'后将位置赋值给Json_Left
//  if(Json_Left >= espjson.length() - 1){return "ERRER";}
//  else{//    for(Json_Right = Json_Left + 1;Json_Right < espjson.length();Json_Right++){  //从Json_Left+1开始历遍espjson,到Json_Bracket(括号数量)为0时停止,位置赋值给Json_Right
//      if(espjson[Json_Right] == '{'){Json_Bracket += 1;}
//      else if(espjson[Json_Right] == '}'){Json_Bracket -= 1;}
//      if(Json_Bracket == 0){break;}
//    }
//    if(Json_Right < espjson.length()){//      return espjson.substring(Json_Left,Json_Right+1);   //.substring(Json_Left,Json_Right+1)提取出可能的JSON字符串并return出
//    }
//  }
//  return "ERRER";
//}int Json_Parse(String Json,int* LightSwitch){  // Brightness为临时控制下语音播放模块StaticJsonDocument<200> jsonBuffer;       //创建一个名为jsonBuffer的JSON变量DeserializationError error = deserializeJson(jsonBuffer, Json);  //使用Json字符串构建JSON变量并赋值于jsonBufferif (error){     //构建错误就报错  Serial.print(F("deserializeJson() failed: "));Serial.println(error.f_str());return -1;}*LightSwitch = jsonBuffer["params"]["powerstate"];return 0;
}/* 函数AT结果反馈Serial */
void Serial_Transfer(){   //主要用于测试连接结果 简单粗暴!char s_A;while(!softSerial1.available()){}   //神技!可以保证信息传输到位while(softSerial1.available() > 0){s_A = char(softSerial1.read()); delay(2);      //延时很关键,串口读取可能过快Serial.print(s_A);}return 0;
}/* LOT服务器连接代码 */
int Aliyun_Connect(){       // 返回数:yes为0,no为-1String s_AT = "";         // s_AT只用于判断是否连接LOT服务器Serial.print("是否开始连接LOT服务器:(yes/no):\t\t");while(s_AT != "yes"){     //输入(yes/no)判断是否连接服务器,yes只需要保证前三个为yes即可,注意需要/r/n及串口监视器的NL AND CL模式if(Serial.available() > 0){s_AT += char(Serial.read());delay(2);      //很关键,串口读取可能过快}else{if(s_AT == "no\r\n"){Serial.println("no\n不连接服务器 将启用部分功能 请尽快连接服务器\n");return -1;}s_AT = "";}}Serial.println("yes\n开始连接LOT服务器 请稍等!\n");softSerial1.println(AT_3); Serial_Transfer();softSerial1.println(AT_4); Serial_Transfer();softSerial1.println(AT_5); Serial_Transfer(); Serial_Transfer(); Serial_Transfer();  //连接WIFI时,它有三次不同的回答,注意来三次应对softSerial1.println(AT_6); Serial_Transfer();softSerial1.println(AT_7); Serial_Transfer();softSerial1.println(AT_8); Serial_Transfer(); Serial_Transfer();  //第一次发“+MQTT.....1” 第二次才是OK,这不同步Serial.println("\nLOT服务器连接完成!\n");while(softSerial1.read() >= 0){}   //最后清理干净各串口while(Serial.read() >= 0){} return 0;
}

4 ArduinoUno开发板—>LED灯 部分

  • 硬件部分自行配置,详细参考Arduino教程

5 云端体验控制

  • 在阿里云物联网控制台的在线调试中修改灯泡的开关即可, 数据会以物模型的形式发送到ESP8266,然后经过Arduino代码解析json,提取有用的信息,控制硬件实现LED灯的开关。

【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关相关推荐

  1. Mixly第三方用户库开发Arduino UNO使用EMW3080连接阿里云

    文章目录 前言 一.实验准备 1.硬件准备 2.软件准备 二.实验过程 1.Mixly库说明 2.文件编写 2.1.编写xxx.xml文件 2.2.编写block/xxx.js文件 2.3.编写zh- ...

  2. 制作Mind+ Arduino UNO + EMW3080芯片连接阿里云的用户库

    文章目录 前言 一.实验准备 1.硬件准备 2.软件准备 二.实验过程 1.下载样例库 1.2.用户库文件结构 1.3.相关配置文件说明 1.3.1.config.json配置文件 1.3.2.mai ...

  3. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-RRPC通讯)

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

  4. 详解Arduino Uno开发板的引脚分配图及定义

    详解Arduino Uno开发板的引脚分配图及定义(重要且基础) https://www.cnblogs.com/Bruce_H21/p/11555605.html 首先开发板实物图如下: 在本篇文章 ...

  5. arduino超声波测距接线图详细_使用Arduino UNO开发板和超声波传感器测量距离

    超声波传感器不仅提供距离测量实用程序,而且没有任何物理接触,但需要我们在无噪音和光线的情况下进行测量,与基于激光的距离测量仪器不同.此外,即使在基于激光的仪器经常降低其效率的日光下,这些仪器也便宜且更 ...

  6. Arduino Uno开发板+电机驱动扩展版CNC Shield V3.0硬件说明

    陈拓 2023/03/24-2023/03/29 1. Arduino CNC Shield V3.00电机驱动扩展版 注意:板子左侧中间的玻璃管是玻封保险丝. Arduino CNC Shield可 ...

  7. 基于Arduino Uno开发板制作音乐播放器

    基于Arduino Uno开发板制作音乐播放器 本文将基于Arduino开发板实现一个音乐播放器. 利用Arduino Uno读取sd卡模块中内存卡的音乐,传输信号到扬声器进行播放. 一.项目软硬件简 ...

  8. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-接收和发送数据)

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

  9. 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-订阅主题)

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

  10. 中移4G模块-ML302-OpenCpu开发-2-MQTT连接阿里云

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

最新文章

  1. Ubuntu16.04 pip3 install 报错 working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
  2. android 图片过滤,android 图片转为bitmap,黑白镜过滤
  3. java-println连接
  4. 《区块链100问》笔记整理——23~41问
  5. linux电脑做笔记软件,知识管理工具, 自由格式数据库, 笔记软件以及个人信息管理...
  6. Linux网络防火墙:iptables与netfilter
  7. [20150705]从AWR抽取有问题的sql语句.txt
  8. c语言if case语句怎么用,这样的case和if一起运用有问题吗?
  9. 主子表对应的字段_Power Pivot针对表筛选的函数及差异
  10. java压缩解压文件
  11. jstack分析线程状态
  12. Linux之常用操作命令总结三
  13. html优秀作品展示,31个漂亮的作品展示网页设计
  14. 阿里云商标注册教程:新手自助申请详细步骤
  15. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。(js代码)
  16. 《人类简史》笔记三—— 历史从无正义
  17. Windows Service 创建与安装
  18. HDLC协议及PPP协议
  19. Gym - 102920 C - Dessert Café (思维)
  20. HTML基于蔡徐坤的打飞机游戏源码

热门文章

  1. NOI 十连测 Zbox loves ants
  2. ubuntu中安装微信
  3. 带宽与码元的关系_带宽和传输速率的关系是什么?
  4. 命令查看计算机出厂时间,Check cosmetics or perfume production date and shelf life by the batch code....
  5. n个水手分椰子问题 (递推)
  6. 冯·米塞斯迭代法(Von Mises iteration)
  7. eNom域名转出图文教程:域名解锁、获取域名转移密码
  8. 机器学习-初级进阶(Thompson 抽样算法 )
  9. HSSFWorkbook 锁定部分单元格,或者锁定一个单元格
  10. VS2005中UNICODE和ANSI以及MBCS的问题