阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输

这篇具有很好参考价值的文章主要介绍了阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

printf重定义资料来自江科大自动化协---<<stm32入门教程>>---<<串口发送+接收>>一节视频讲解

1、调试ESP8266

细节请看b站这个up主的视频阿里云+ESP8266+STM32远程点灯(流程讲解)

阿里云平台配置细节请看10分钟玩转阿里云物联网平台设备接入、管理、运维

这里只记录一下大概内容,方便日后调试。

1、用USB转串口工具连接ESP8266,先调通esp8266到阿里云端的线路(此步在后续调试esp8266时也尤为重要,因为这样不需要反复修改代码反复烧写,只需几个AT指令)

接线方式
ESP8266 USB转串口工具
3.3 3.3
GND GND
TX RX
RX TX

 注意:有时会出现接线正确发送不出指令的情况,网上查到的原因是,USB转串口工具输出的3.3V电压驱动能力不行,带不动ESP8266,可以更换其他稳定的供电设备,我手边没有万用表,没法测量验证,但是更换电源可以解决此问题;另外官方文件说ESP8266供电电压范围是3.0V-3.6V,我器件尝试接过5V电压,ESP8266没有烧坏,但发热明显,保守期间不要尝试此接法。

AT指令
AT
AT+RST 重启模块
AT+RESTORE 恢复出厂设置--擦除所有保存在flash中的参数
AT+CWMODE=1 设置wifi模式-----AP模式
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com" 设置时域和SNTP服务器 
AT+CWJAP="wifiname","password"  连接AP
AT+MQTTUSERCFG=0,1,"NULL","username","passwd",0,0,""
AT+MQTTCLIENTID=0,"ClientId"
AT+MQTTCONN=0,"mqttHostUrl",1883,1
AT+MQTTSUB=0,"/{ProductKey}/{DeviceName}/user/get",1 订阅自定义topic
AT+MQTTPUB=0,"/{ProductKey}/{DeviceName}/user/update","{\"temp\":50.5}",1,0 发布自定义Topic
AT+MQTTSUB=0,"/sys/{ProductKey}/{DeviceName}/thing/service/property/set",1 订阅物模型
AT+MQTTPUB=0,"/sys/{ProductKey}/{DeviceName}/thing/event/property/post","{\"params\":{\"EnvironmentTemperature\":35}}",1,0 上报设备属性

Clientld需要在‘,’之前加转义字符 '\'

例:

阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输

指令中topic:

阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输

2、用stm32调试esp8266

接线方式
STM32 ESP8266 USB转串口工具
3.3 3.3
GND GND GND
RX TX RX
TX RX

可以使用面包板,对线路进行拓展,将ESP8266的TX同时接到STM32和串口工具的RX引脚,方便使用电脑的串口调试软件观察ESP8266的配置状态,方便调试。

ESP8266的初始化函数(用STM32的串口发送AT指令给ESP8266)

//初始化ESP8266连接到阿里云函数
void ESP8266_Init(void)
{
	OLED_ShowString(1,1,"loading...");
	//1
	Serial_String("AT+RST\r\n");
	ESP_FeedBack(1);
	Delay_ms(2000);
	//2
	Serial_String("AT+RESTORE\r\n");
	ESP_FeedBack(2);
	Delay_ms(2000);
	//3
	Serial_String("AT+CWMODE=1\r\n");
	ESP_FeedBack(3);
	Delay_ms(2000);
	//4
	Serial_String("AT+CIPSNTPCFG=1,8,\"ntp1.aliyun.com\"\r\n");//加转义字符
	ESP_FeedBack(4);
	Delay_ms(3000);
	//5
	Serial_String("AT+CWJAP=\"LAPTOP\",\"asdfghjkl\"\r\n");//加转义字符
	ESP_FeedBack(5);
	Delay_ms(3000);
	//6
	Serial_String("AT+MQTTUSERCFG=0,1,\"NULL\",\"ESP8266-01&ibln7d8PcHp\",\"e0ae924e8007d0259c7a7d31bd3f01fd1bfdc270b8e689fa757e4f23de4cccb4\",0,0,\"\"\r\n");
	ESP_FeedBack(6);
	Delay_ms(5000);
	//7
	Serial_String("AT+MQTTCLIENTID=0,\"ibln7d8PcHp.ESP8266-01|securemode=2\\,signmethod=hmacsha256\\,timestamp=1679206129784|\"\r\n");
	ESP_FeedBack(7);
	Delay_ms(5000);
	//8
	Serial_String("AT+MQTTCONN=0,\"iot-06z00ehfqvp2bgm.mqtt.iothub.aliyuncs.com\",1883,1\r\n");
	ESP_FeedBack(8);
	Delay_ms(5000);
	//9
//	Serial_String("/ibln7d8PcHp/ESP8266-01/user/get\",1\r\n");
//	ESP_FeedBack(9);
//	Delay_ms(5000);
	//10订阅物模型
	Serial_String("AT+MQTTSUB=0,\"/sys/ibln7d8PcHp/ESP8266-01/thing/service/property/set\",1\r\n");
	ESP_FeedBack(9);
	Delay_ms(5000);
	
}

ESP8266日志接收函数(STM32接收ESP8266发送回来的日志数据,分析数据做出初始化反馈)

//查看错误反馈函数
void ESP_FeedBack(uint8_t t)
{
	Delay_ms(1000);
	if( strstr((const char *)ESP8266_To_Serial,"ERROR") )
	{
		Refresh_DMA();//刷新DMA缓冲区以及计数器
		memset(ESP8266_To_Serial,0,100);//将数组清零
		OLED_ShowString(2,1,"ERR:");
		OLED_ShowNum(2,4+t,t,1);
	}
}

main.c

int main(void)
{	
	OLED_Init();
	Serial_Init();//初始化串口2配置
	USART_DMA_Init();//初始化DMA转运USART2_RX配置
	ESP8266_Init();//ESP8266连接服务器

	while(1)
	{
		i++;
        //一次发送多个物模型数据
		printf("AT+MQTTPUB=0,\"/sys/ibln7d8PcHp/ESP8266-01/thing/event/property/post\",\"{\\\"params\\\":{\\\"EnvironmentTemperature\\\":%d},\\\"LightLux\\\":%d,\\\"AirSpeed\\\":%d}}\",1,0\r\n",i,i+1,i+2);

        //一次发送一个物模型数据
		printf("AT+MQTTPUB=0,\"/sys/ibln7d8PcHp/ESP8266-01/thing/event/property/post\",\"{\\\"params\\\":{\\\"LightLux\\\":%d}}\",1,0\r\n",i);
//		printf("AT+MQTTPUB=0,\"/sys/ibln7d8PcHp/ESP8266-01/thing/event/property/post\",\"{\\\"params\\\":{\\\"LightLux\\\":%d}}\",1,0\r\n",i);
		Delay_ms(10000);//延时10秒
	}
}

请求数据格式要求:

阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输

 

发送数据时需要使用变量,若直接使用串口发送函数,则不能存在变量,因此解决此问题需要重定义printf函数实现。步骤如下:

1、在keil中使用printf之前需要线设置一下

阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输

2、 打印函数

方法一:重定向printf

将printf打印的东西输出到串口

重写fputc()函数,因为printf函数使用时也是调用fputc函数一个个的打印。fputc函数发送到串口,printf函数自然也就打印输出到了串口

重写fputc函数:

#include <stdio.h>

int fputc(int ch,FILE *f)
{
    Serial_SendByte(ch);//这里调用自己写的串口发送字节函数
    return ch;
}


//主函数
void main(void)
{
    printf("NUm=%d\n",666);

    while(1)
    {

    }
    
}

方法二:用sprintf函数(此处是实现打印到串口的第二种方法)

sprintf函数不需要重定义,因为此函数第一个参数是指定打印位置

sprintf函数作用是把格式化字符输出到一个字符串里

#include <stdio.h>

char string[100];//定义一个足够大的缓存空间

sprintf(string,"NUM=5d\n",666);//输出到string中

方法三:封装sprintf函数(此方法用到了可变参数列表,记录下来只是学习一下)

void Serial_printf(char *format,...)
{
    char string[100];
    va_list arg;//存放可变参数列表的变量
    va_start(arg,format)//从format开始存放参数列表到arg中
    vsprintf(string,format,arg);//打印格式   这里up解释是sprintf只能接收直接写的参数
    va_end(arg);//释放arg空间
    Serial_SendByte(string);//调用自己写的串口发送字节函数
}

keil修改一下配置

阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输文章来源地址https://www.toymoban.com/news/detail-425404.html

到了这里,关于阿里云 MQTT协议 AT指令 ESP8266-01S 数据上下传输的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP8266-01s入门:上报和下发数据控制单片机 AT指令讲解和上云 烧录AT固件与OneNET MQTT通信教程包含MQTT.fx1.7.1教程(微信小程序通信单片机前置任务)

    本项目教程总共分为四节 1.创建OneNET新版MQTT设备:为微信小程序与单片机通信打基础(微信小程序通信单片机前置任务) 2.(当前文章)ESP8266-01s入门:烧录AT固件与OneNET MQTT通信教程包含MQTT.fx1.7.1教程(微信小程序通信单片机前置任务) 3.物联网实践教程:微信小程序结合

    2024年02月04日
    浏览(53)
  • ESP8266-01S+MQTT+阿里云数据传输

    ESP8266-01S模块一个 USB转TTL一个 软件资料在文章最后 打开百度云盘资料里的文件夹中的\\\"ESP8266_固件烧录\\\"文件夹 打开这个文件夹 打开该文件夹中的exe文件即可,然后打开ESP8266 DownloadTool 3.点击图中箭头所指按钮,选择文件夹中的MQTT固件 4.硬件接线 ESP8266的TX-----TTL板的RX ESP8266的

    2023年04月15日
    浏览(51)
  • STM32发送数据ESP8266固件烧录MQTT和AT指令调试与链接OneNET

    STM32连接ESP8266发送数据到OneNET平台 1.硬件型号:ESP8266-01s 和 USBTTL转接口模块 2.固件:1471_esp8266-at_mqtt-1m(MQTT透传AT固件(固件号:1471)) 3.固件烧录工具:flash_download_tool_3.9.4 固件下载和烧录工具均可在安信可官网下载安信可AT固件下载 本文章使用的是XCOM V2.6 串口助手 4.On

    2024年02月04日
    浏览(67)
  • ESP8266-01S烧录MQTT透传AT固件

    须在正常模式下(VCC、GND、RX、TX),将 IO0引脚 接地, EN引脚 接3.3V(总共 6 根线)连入USB TO TTL模块,将USB TO TTL模块插入电脑 找到固件和工具的位置,下载    注意:烧录的bin文件要放在烧录工具的同一个文件夹下,避免烧录工具找不到bin文件造成下载出错 打开烧录工具   需

    2024年02月10日
    浏览(56)
  • 认识 ESP8266—ESP-01S (含AT指令)

    了解完本文内容,可以去观看我的另一篇文章-----》 STM32—通过HC05配置ESP8266(ESP01s)获取时间和天气 ESP8266 是串口型 WIFI,速度比较低,不能用来传输图像或者视频这些大容量的数据,主要应用于数据量传输比较少的场合,比如温湿度信息,一些传感器的开关量等。 ESP8266 的

    2024年02月06日
    浏览(52)
  • STM32驱动ESP8266连接阿里云(1)----使用AT指令连接阿里云

    购买的ESP8266一般没带MQTT固件,所以无法通过MQTT指令与云平台通信,需要烧录固件。 MQTT固件可以在安信可科技进行下载。 交流qun:6_15061293。 https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp8266/index.html 下载器可以使用乐鑫官方的下载器。 https://www.espressif.com.cn/zh-hans/s

    2024年02月03日
    浏览(57)
  • ESP8266-01 MQTT固件烧录并连接阿里云服务器

    1、烧录工具:flash_download_tool :   链接:https://pan.baidu.com/s/1jJJ07G56jNJ3SrOwstPzVA?pwd=8i93  提取码:8i93 2、串口调试助手:串口调试助手 3、阿里云配置生成工具: 链接:https://pan.baidu.com/s/13tjpFwGMeR0juS5OSEBiJQ?pwd=61me  提取码:61me 4、USB TO TTL 5、esp8266 01s 6、AT固件:下载   向esp8266烧

    2024年02月06日
    浏览(65)
  • STM32进阶学习(1)-ESP01-S的AT指令测试、MQTT原理

    如图,不多解释了。 参数: 这里注意的是,频谱范围是2.4GHZ,所以连接WIFI时只支持2.4HGZ的频段,不支持5Ghz频段。另外,供电是3.3V,这里让单片机给其供电即可。 电路图: 拿到手的ESP01S,首先要验证其功能是否正常,这里我用ESP01S连接USB转串口模块,并与电脑上的串口调试

    2024年02月09日
    浏览(46)
  • ESP-01S使用AT指令连接阿里云

    这次分享下ESP8266-01S使用AT指令连接阿里云,为了后面stm32--esp-01s-阿里云(MQTT)做铺垫 目录 步骤: 1.烧录阿里云固件 首先我们打开-安信可官网下载阿里云的固件,如图 1.1串口助手与esp-01s接线说明 注:文章后面会附上本文提及到的的所有资料。 2.在阿里云注册设备,产品等

    2024年02月02日
    浏览(45)
  • 【物联网】手把手完整实现STM32+ESP8266+MQTT+阿里云+APP应用——第1节-阿里云配置+MQTT.fx模拟与使用AT命令发布订阅消息

    🌟博主领域:嵌入式领域人工智能软件开发 本节目标: 通过MQTT.fx模拟连接或通过串口连接ESP8266发送AT命令,实现阿里云物联网平台发送数据同时接收数据,IOT studio界面显示数据。具体来说:使用ESP8266 ESP-01来连接网络,获取设备数据发送到阿里云物联网平台并显示且oled显

    2024年02月03日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包