软件以及烧录文件
链接:https://pan.baidu.com/s/1Y3hiw_oVPKRTT9mtGg7WDA?pwd=mlhy
提取码:mlhy
一、ESP8266烧录MQTT固件
如ESP8266接3.3v无法正常工作则接入5V电压
GPIO0一定要接地(接地代表烧录固件模式)
注意波特率115200
ESP8266的TX----->TTL板的RX
ESP8266的RX----->TTL板的TX
ESP8266的3V3----->TTL板的3V3/5V
ESP8266的GND-----TTL板的GND
ESP8266的GPIO0(0)-----TTL板的GND
烧录完毕后紧接测试:输入AT+GMR
烧录完毕后GPIO0口一定要悬空,只与TLL模块连接RX、TX、GND、VCC四个口。
二、配置阿里云平台
(1)新建产品
选择自定义品类,联网方式选择WiFi,数据格式选JSON。
(2)新建设备
产品栏选我们刚刚新建的产品,设备名称由自己定义,但注意不要太过复杂,因为后续上报消息需要用到设备名称。
(3)功能定义
数据类型根据需要自定,我这边选择的是单浮点型。
(4)发布上线
注意一定要点击发布上线。
三、ESP8266连接阿里云的准备工作
(1)复制设备证书
(2)粘贴三元组生成域名、客户id、用户名及密码
此处大坑:地区一定是华东2,否则后续发送命令必定出错(有感而发)
这里一定要随便填一下
生成前:
生成后:
(3)打开串口调试助手
依次输入以下命令:
AT+RST //ESP8266恢复出厂设置
AT+CWMODE=3 //AP+Station模式
AT+CWJAP="DES","abcd1234" //对应自己的WiFi及密码
WiFi连接成功
四、ESP8266开始连接阿里云
依次发送以下命令:
(1)配置 MQTT协议用户参数
AT+MQTTUSERCFG=0,1,"client_id","Sound_STM32&k0c49DpK2UJ","27FF93D8794315693C55A2379F7135D1B9171C35",0,0,""
成功后返回OK:
在keil软件里用的格式为:
Serial_SendString("AT+MQTTUSERCFG=0,1,\"client_id\",\"Sound_STM32&k0c49DpK2UJ\",\"27FF93D8794315693C55A2379F7135D1B9171C35\",0,0,\"\"\r\n");
(2)设置 MQTT 客户端的 ID
Attention:逗号前要加转义字符'';
AT+MQTTCLIENTID=0,"2321312|securemode=3,signmethod=hmacsha1,timestamp=23213|"
成功后返回OK:
在keil软件里用的格式为:
Serial_SendString("AT+MQTTCLIENTID=0,\"2321312|securemode=3\\,signmethod=hmacsha1\\,timestamp=23213|\"\r\n");
(3)建立 MQTT 连接
Attention:com后面的分号要去掉
AT+MQTTCONN=0,"k0c49DpK2UJ.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
成功后返回OK:
在keil软件里用的格式为:
Serial_SendString("AT+MQTTCONN=0,\"k0c49DpK2UJ.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883,1\r\n");
(4)设备显示已激活
(5)单片机每次连接阿里云都必须经历这三步骤,如下所示:
Attention:每条消息之间一定要有一定的间隔时间
五、测试
(1)订阅主题
查看主题:
(2)AT命令订阅主题
Attention:注意${deviceName}要修改成自创的设备名字,如Sound_STM32
AT+MQTTSUB=0,"/sys/k0c49DpK2UJ/Sound_STM32/thing/service/property/set",1
(3)查看是否订阅成功
Attention:订阅主题操作只需要执行一次,后续在单片机上无需重复进行
(4)物模型进行单条消息上报测试
格式:
AT命令:
AT+MQTTPUB=0,"/sys/k0c49DpK2UJ/Sound_STM32/thing/event/property/post","{"params":{"temp":30}}",1,0
成功后返回:
查看物模型数据:
在keil软件里用的格式为:
printf("AT+MQTTPUB=0,\"/sys/k0c49DpK2UJ/Sound_STM32/thing/event/property/post\",\"{\\\"params\\\":{\\\"temp\\\":%d}}\",1,0\r\n",buffer[2]-3);
(5)扩展:物模型进行一次性上报多条消息(注:进行一次性上报的产品与设备不同于上文的产品与设备)
在keil软件里用的格式为:
const char* pubtopic="/sys/k0c491prW9f/mqtt_STM32/thing/event/property/post";
printf("AT+MQTTPUB=0,\"%s\",\"{\\\"method\\\":\\\"thing.event.property.post\\\"\\,\\\"params\\\":{\\\"temp\\\":%d.%d\\,\\\"humi\\\":%d.%d\\,\\\"Light\\\":%.1f\\}}\",0,0\r\n",pubtopic,buffer[2]-3,buffer[3],buffer[0],buffer[1],100-(float)AD_GetValue(ADC_Channel_6)/4096*100);
(6)消息下发
该功能得写好串口接收代码才能很好地运用起来。如:用来给单片机串口发ON或OFF来控制LED灯的亮灭,笔者在此就不多做演示了。
附串口接收代码:
char RECS[250];
void USART1_IRQHandler()
{
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
RECS[i++]=USART_ReceiveData(USART1);
if((RECS[i-2]=='\r')|(RECS[i-1]=='\n'))
{
RECS[i-2]='\0';
i = 0;
j = 0;
while(RECS[j++] != '\0')
{
if(RECS[j]=='L' && RECS[j+1]=='E' && RECS[j+2]=='D' && RECS[j+3]=='O'&& RECS[j+4]=='N')
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
}
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
六、将数据转存到阿里云数据库(Mysql)
(1)配置RDS云数据库
1、数据库地域必须与物联网平台对应。
2、登陆数据库:
第一次开通数据库需要手动重置账号与密码,详情请各位自行百度。要牢记用户名与密码,后续会用到。
3、新增Mysql实例以及创建表:
新增实例:
实例名称后续会用到。我这边的实例名称是mlh。
创建表:
附带一些简单的数据库查询语句:
-- 查看所有数据 -- SELECT * FROM `receive`
-- 插入数据 INSERT INTO `receive` (`temp`, `humi`, `light`) VALUES (100, 100, 100);
-- 更新指定id的数据 UPDATE `receive` SET `temp` = 15, `humi` = 25, `light` = 35 WHERE `id` = 1;
-- 新建自增id列 ALTER TABLE `receive` ADD COLUMN `id` INT AUTO_INCREMENT PRIMARY KEY FIRST;
-- 删除范围内的数据 DELETE FROM `receive` WHERE `id` BETWEEN 11 AND 400;
-- 删除所有表数据 DELETE FROM `receive`
-- 删除指定id的数据 DELETE FROM `receive` WHERE `id` = 13;
-- 获取当前最大的id值 SELECT MAX(`id`) FROM `receive`;
-- 设置自增的初始值为当前最大id值 + 1
-- ALTER TABLE `receive` AUTO_INCREMENT = 2;
-- 插入数据 INSERT INTO `receive` (`temp`, `humi`, `light`) VALUES (100, 100, 100);
-- 添加时间戳 ALTER TABLE receive ADD COLUMN timestamp_column TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
至此云数据库配置完成。
(2)配置云产品流转
1、创建数据源
添加Topic
2、添加数据目的
名称自定
点击编辑
填入第一步我们配置好的信息,实例,数据库名称, 用户账号密码等。
3、配置解析器
先创建解析器
关联我们刚刚配置好的数据源和数据目的
最后配置解析器脚本
我这边上传的是三个数据,每次上报数据都会进行一次数据流转,所以一定要一次性上报三条数据,这样数据库才能正常接收,否则接收不到数据数据库则为NULL。(物模型一次性上报数据的方法上文有提及)
(3)演示效果
用SQL语句进行表查询
可以看到上报到云平台的数据被转存进数据库保持起来,并且支持数据的导入导出。
版权归原作者 MLH_ 所有, 如有侵权,请联系我们删除。