【物联网】Arduino Uno开发板连接阿里云实现云端远程控制LED灯开关
文章目录
- 1 思维图概览
- 2 阿里云—>ESP8266 部分
- 3 ESP8266—>ArduinoUno开发板 部分
- 4 ArduinoUno开发板—>LED灯 部分
- 5 云端体验控制
1 思维图概览
需要实现的有
- ESP8266通过wifi与阿里云进行通信
- ESP8266与Arduino Uno开发板的通信
- Arduino Uno开发板与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灯开关相关推荐
- Mixly第三方用户库开发Arduino UNO使用EMW3080连接阿里云
文章目录 前言 一.实验准备 1.硬件准备 2.软件准备 二.实验过程 1.Mixly库说明 2.文件编写 2.1.编写xxx.xml文件 2.2.编写block/xxx.js文件 2.3.编写zh- ...
- 制作Mind+ Arduino UNO + EMW3080芯片连接阿里云的用户库
文章目录 前言 一.实验准备 1.硬件准备 2.软件准备 二.实验过程 1.下载样例库 1.2.用户库文件结构 1.3.相关配置文件说明 1.3.1.config.json配置文件 1.3.2.mai ...
- 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-RRPC通讯)
B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...
- 详解Arduino Uno开发板的引脚分配图及定义
详解Arduino Uno开发板的引脚分配图及定义(重要且基础) https://www.cnblogs.com/Bruce_H21/p/11555605.html 首先开发板实物图如下: 在本篇文章 ...
- arduino超声波测距接线图详细_使用Arduino UNO开发板和超声波传感器测量距离
超声波传感器不仅提供距离测量实用程序,而且没有任何物理接触,但需要我们在无噪音和光线的情况下进行测量,与基于激光的距离测量仪器不同.此外,即使在基于激光的仪器经常降低其效率的日光下,这些仪器也便宜且更 ...
- Arduino Uno开发板+电机驱动扩展版CNC Shield V3.0硬件说明
陈拓 2023/03/24-2023/03/29 1. Arduino CNC Shield V3.00电机驱动扩展版 注意:板子左侧中间的玻璃管是玻封保险丝. Arduino CNC Shield可 ...
- 基于Arduino Uno开发板制作音乐播放器
基于Arduino Uno开发板制作音乐播放器 本文将基于Arduino开发板实现一个音乐播放器. 利用Arduino Uno读取sd卡模块中内存卡的音乐,传输信号到扬声器进行播放. 一.项目软硬件简 ...
- 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-接收和发送数据)
B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...
- 中移4G模块-ML302-OpenCpu开发-(MQTT连接阿里云-订阅主题)
B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...
- 中移4G模块-ML302-OpenCpu开发-2-MQTT连接阿里云
B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...
最新文章
- Ubuntu16.04 pip3 install 报错 working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
- android 图片过滤,android 图片转为bitmap,黑白镜过滤
- java-println连接
- 《区块链100问》笔记整理——23~41问
- linux电脑做笔记软件,知识管理工具, 自由格式数据库, 笔记软件以及个人信息管理...
- Linux网络防火墙:iptables与netfilter
- [20150705]从AWR抽取有问题的sql语句.txt
- c语言if case语句怎么用,这样的case和if一起运用有问题吗?
- 主子表对应的字段_Power Pivot针对表筛选的函数及差异
- java压缩解压文件
- jstack分析线程状态
- Linux之常用操作命令总结三
- html优秀作品展示,31个漂亮的作品展示网页设计
- 阿里云商标注册教程:新手自助申请详细步骤
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。(js代码)
- 《人类简史》笔记三—— 历史从无正义
- Windows Service 创建与安装
- HDLC协议及PPP协议
- Gym - 102920 C - Dessert Café (思维)
- HTML基于蔡徐坤的打飞机游戏源码
热门文章
- NOI 十连测 Zbox loves ants
- ubuntu中安装微信
- 带宽与码元的关系_带宽和传输速率的关系是什么?
- 命令查看计算机出厂时间,Check cosmetics or perfume production date and shelf life by the batch code....
- n个水手分椰子问题 (递推)
- 冯·米塞斯迭代法(Von Mises iteration)
- eNom域名转出图文教程:域名解锁、获取域名转移密码
- 机器学习-初级进阶(Thompson 抽样算法 )
- HSSFWorkbook 锁定部分单元格,或者锁定一个单元格
- VS2005中UNICODE和ANSI以及MBCS的问题