STM32+WIFI+MQTT+云Mysql数据上报并转存到云数据库

软件以及烧录文件

链接:https://pan.baidu.***/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、V***四个口。

二、配置阿里云平台

(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:***后面的分号要去掉

AT+MQTTCONN=0,"k0c49DpK2UJ.iot-as-mqtt.***-shanghai.aliyuncs.***",1883,1

成功后返回OK:

在keil软件里用的格式为:

Serial_SendString("AT+MQTTCONN=0,\"k0c49DpK2UJ.iot-as-mqtt.***-shanghai.aliyuncs.***\",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语句进行表查询

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

转载请说明出处内容投诉
CSS教程_站长资源网 » STM32+WIFI+MQTT+云Mysql数据上报并转存到云数据库

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买