ToB企服应用市场:ToB评测及商务社交产业平台

标题: STM32+WIFI+MQTT+云Mysql数据上报并转存到云数据库 [打印本页]

作者: 慢吞云雾缓吐愁    时间: 2024-6-14 23:34
标题: STM32+WIFI+MQTT+云Mysql数据上报并转存到云数据库
软件以及烧录文件


链接: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软件里用的格式为:
  1. 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软件里用的格式为:
  1. 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软件里用的格式为:
  1. 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软件里用的格式为:
  1. printf("AT+MQTTPUB=0,"/sys/k0c49DpK2UJ/Sound_STM32/thing/event/property/post","{\\"params\\":{\\"temp\\":%d}}",1,0\r\n",buffer[2]-3);
复制代码
(5)扩展:物模型举行一次性上报多条消息(注:举行一次性上报的产品与设备不同于上文的产品与设备)

在keil软件里用的格式为:
  1. const char* pubtopic="/sys/k0c491prW9f/mqtt_STM32/thing/event/property/post";
  2. 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灯的亮灭,笔者在此就不多做演示了。

附串口接收代码:
  1. char RECS[250];
  2. void USART1_IRQHandler()
  3. {
  4. if(USART_GetITStatus(USART1,USART_IT_RXNE))
  5. {
  6.                 RECS[i++]=USART_ReceiveData(USART1);
  7.                 if((RECS[i-2]=='\r')|(RECS[i-1]=='\n'))  
  8. {
  9.                         RECS[i-2]='\0';
  10.                         i = 0;
  11.                     j = 0;
  12.                         while(RECS[j++] != '\0')
  13.                 {
  14.                    if(RECS[j]=='L' && RECS[j+1]=='E' && RECS[j+2]=='D' && RECS[j+3]=='O'&& RECS[j+4]=='N')
  15.                         {
  16.               GPIO_ResetBits(GPIOC,GPIO_Pin_13);
  17.                         }
  18.         }
  19. }
  20.             USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  21. }
  22. }
复制代码
六、将数据转存到阿里云数据库(Mysql)

(1)设置RDS云数据库

1、数据库地域必须与物联网平台对应。

2、登岸数据库:
第一次开通数据库须要手动重置账号与暗码,详情请各位自行百度。要牢记用户名与暗码,后续会用到。

3、新增Mysql实例以及创建表:
新增实例:
实例名称后续会用到。我这边的实例名称是mlh。


创建表:

附带一些简单的数据库查询语句:
  1. -- 查看所有数据  -- SELECT * FROM `receive`
  2. -- 插入数据  INSERT INTO `receive` (`temp`, `humi`, `light`) VALUES (100, 100, 100);
  3. -- 更新指定id的数据   UPDATE `receive` SET `temp` = 15, `humi` = 25, `light` = 35 WHERE `id` = 1;
  4. -- 新建自增id列  ALTER TABLE `receive` ADD COLUMN `id` INT AUTO_INCREMENT PRIMARY KEY FIRST;
  5. -- 删除范围内的数据   DELETE FROM `receive` WHERE `id` BETWEEN 11 AND 400;
  6. -- 删除所有表数据   DELETE FROM `receive`
  7. -- 删除指定id的数据  DELETE FROM `receive` WHERE `id` = 13;
  8. -- 获取当前最大的id值  SELECT MAX(`id`) FROM `receive`;
  9. -- 设置自增的初始值为当前最大id值 + 1  
  10. -- ALTER TABLE `receive` AUTO_INCREMENT = 2;
  11. -- 插入数据   INSERT INTO `receive` (`temp`, `humi`, `light`) VALUES (100, 100, 100);
  12. -- 添加时间戳  ALTER TABLE receive ADD COLUMN timestamp_column TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
复制代码
至此云数据库设置完成。
(2)设置云产品流转

1、创建数据源

添加Topic


2、添加数据目标
名称自定

点击编辑

填入第一步我们设置好的信息,实例,数据库名称, 用户账号暗码等。

3、设置解析器
先创建解析器

关联我们刚刚设置好的数据源和数据目标

最后设置解析器脚本
我这边上传的是三个数据,每次上报数据都会举行一次数据流转,以是肯定要一次性上报三条数据,这样数据库才能正常接收,否则接收不到数据数据库则为NULL。(物模型一次性上报数据的方法上文有提及)

(3)演示效果

用SQL语句举行表查询

可以看到上报到云平台的数据被转存进数据库保持起来,并且支持数据的导入导出。












免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4