0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 + ESP8266 + MQTT协议连接OneNet

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-02-28 13:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、环境介绍

单片机采用:STM32F103C8T6

上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可。比如:GSM模块、有线网卡等。

开发软件:keil5

硬件连接功能:ESP8266接在STM32的串口3上。通过AT指令与ESP8266进行通信

注意:本篇文章没有贴ESP8266的底层编程代码,如果不会ESP8266底层编程,请看这里:

https://blog.csdn.net/xiaolong1126626497/article/details/107379554

如果需要了解ESP8266+MQTT协议连接阿里云物联网服务器请看这里:https://blog.csdn.net/xiaolong1126626497/article/details/107311897

二、功能介绍

2.1 功能说明

通过OneNet物联网服务器实现设备数据远程上传、下发,实现数据交互(不清楚OneNet物联网服务器功能的可以百度一下进入官网看简介)。之前的OneNet服务器不支持标准MQTT协议登录的,现在官网更新之后支持标准的MQTT协议,本篇文章介绍使用STM32+ESP8266使用标准MQTT协议登录Onenet服务器,实现数据交互。实现步骤OneNet官方提供了很详细的文档,可以参考一下。

文档地址:OneNET-中国移动物联网开放平台

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

2.2 硬件资源

在当前使用的开发板上有4盏LED灯、一个蜂鸣器、4个按键,ESP8266型号是ESP-12F,STM32型号是:STM32F103C8T6。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

三、OneNet支持的MQTT协议版本

目前OneNet服务器支持MQTT 3.1.1版本,MQTT协议官网:MQTT - The Standard for IoT Messaging

报文支持情况: 支持connect、subscribe、publish、ping、unsubscribe、disconnect等报文,不支持pubrec、pubrel、pubcomp报文。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

四、登录OneNet服务器创建物联网产品

没有注册账号的,需要提前登录官网注册账号,再进入下面步骤:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

这里根据自己产品情况填写。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

产品创建成功之后,点击产品名称,跳转页面,继续添加设备。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

下面选择仪表盘的数据来源,根据自己创建的数据点选择。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

创建一个文本控件,显示数据点更新的时间,方便调试。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

OneNte手机版本的APP,登录之后也可以看到该页面。

下载地址:https://open.iot.10086.cn/doc/book/device-develop/multpro/sdk-doc-tool/APP.html

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

下面是手机上登录APP看到的界面效果:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

五、OneNet服务器MQTT登录地址与订阅主题相关格式介绍

官网介绍文档地址:设备连接_开发者文档_OneNET

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

5.1 MQTT服务器登录地址

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

目前MQTT协议支持两个IP地址和端口号,一个需要加密、一个不需要加密。

注意:单片机上移植加密算法很麻烦,这里采用不需要加密的端口。(IP地址: 183.230.40.96 端口: 1883)

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

5.2 MQTT登录的:设备ID、用户名称、密码 格式参数

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

上面图片里说明了,OneNet的设备参数与标准MQTT协议的登录参数对应关系。 OneNet的设备参数,在设备页面可以去查看。

登录密码生成看下面步骤:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

注意:该工具在win10系统运行可能会提示非信任程序,点击任要运行即可。

下面是生成MQTT登录密匙的工具使用示例。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

注意:工具中填的参数说明请看文档介绍。

res选项参数的格式:products/{产品ID}/devices/{设备名称}

et是设置token过期时间:算出1970-1-1到你想要设置的到期时间,单位是秒,填入即可。

比如: 超时时间设置为2020-07-20 ,那么,这里填入的秒就是:1970-1-1到2020-07-20之间的秒单位时间。

Linux下代码:

#include 
#include 
 #include 

int main()
{
    time_t time_sec;
    time_sec=time(NULL);  //当前的秒单位时间--UTC时间
	printf("当前时间(秒):%ldn",time_sec);
	printf("加30天的时间(秒):%ldn",time_sec+30*24*60*60);
	return 0;
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

key的参数格式: 就是设备创建之后,在设备详情页的key

工具生成的结果值,直接当做MQTT登录的密码。

5.3 主题订阅格式

文档地址:协议规范_开发者文档_OneNET

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

5.4 设备保活时间

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

5.5 向服务器传数据点

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

六、核心代码

6.1 matt.c代码

#include "mqtt.h"

u8 *mqtt_rxbuf;
u8 *mqtt_txbuf;
u16 mqtt_rxlen;
u16 mqtt_txlen;
u8 _mqtt_txbuf[256];//发送数据缓存区
u8 _mqtt_rxbuf[256];//接收数据缓存区

typedef enum
{
	//名字 	    值 			报文流动方向 	描述
	M_RESERVED1	=0	,	//	禁止	保留
	M_CONNECT		,	//	客户端到服务端	客户端请求连接服务端
	M_CONNACK		,	//	服务端到客户端	连接报文确认
	M_PUBLISH		,	//	两个方向都允许	发布消息
	M_PUBACK		,	//	两个方向都允许	QoS 1消息发布收到确认
	M_PUBREC		,	//	两个方向都允许	发布收到(保证交付第一步)
	M_PUBREL		,	//	两个方向都允许	发布释放(保证交付第二步)
	M_PUBCOMP		,	//	两个方向都允许	QoS 2消息发布完成(保证交互第三步)
	M_SUBSCRIBE		,	//	客户端到服务端	客户端订阅请求
	M_SUBACK		,	//	服务端到客户端	订阅请求报文确认
	M_UNSUBSCRIBE	,	//	客户端到服务端	客户端取消订阅请求
	M_UNSUBACK		,	//	服务端到客户端	取消订阅报文确认
	M_PINGREQ		,	//	客户端到服务端	心跳请求
	M_PINGRESP		,	//	服务端到客户端	心跳响应
	M_DISCONNECT	,	//	客户端到服务端	客户端断开连接
	M_RESERVED2		,	//	禁止	保留
}_typdef_mqtt_message;

//连接成功服务器回应 20 02 00 00
//客户端主动断开连接 e0 00
const u8 parket_connetAck[] = {0x20,0x02,0x00,0x00};
const u8 parket_disconnet[] = {0xe0,0x00};
const u8 parket_heart[] = {0xc0,0x00};
const u8 parket_heart_reply[] = {0xc0,0x00};
const u8 parket_subAck[] = {0x90,0x03};

void MQTT_Init(void)
{
    //缓冲区赋值
	mqtt_rxbuf = _mqtt_rxbuf;
    mqtt_rxlen = sizeof(_mqtt_rxbuf);
	mqtt_txbuf = _mqtt_txbuf;
    mqtt_txlen = sizeof(_mqtt_txbuf);
	memset(mqtt_rxbuf,0,mqtt_rxlen);
	memset(mqtt_txbuf,0,mqtt_txlen);
	
	//无条件先主动断开
	MQTT_Disconnect();
    delay_ms(100);
	MQTT_Disconnect();
    delay_ms(100);
}

/*
函数功能: 登录服务器
函数返回值: 0表示成功 1表示失败
*/
u8 MQTT_Connect(char *ClientID,char *Username,char *Password)
{
    u8 i,j;
    int ClientIDLen = strlen(ClientID);
    int UsernameLen = strlen(Username);
    int PasswordLen = strlen(Password);
    int DataLen;
	mqtt_txlen=0;
	//可变报头+Payload  每个字段包含两个字节的长度标识
    DataLen = 10 + (ClientIDLen+2) + (UsernameLen+2) + (PasswordLen+2);
	
	//固定报头
	//控制报文类型
    mqtt_txbuf[mqtt_txlen++] = 0x10;		//MQTT Message Type CONNECT
	//剩余长度(不包括固定头部)
	do
	{
		u8 encodedByte = DataLen % 128;
		DataLen = DataLen / 128;
		// if there are more data to encode, set the top bit of this byte
		if ( DataLen > 0 )
			encodedByte = encodedByte | 128;
		mqtt_txbuf[mqtt_txlen++] = encodedByte;
	}while ( DataLen > 0 );
    	
	//可变报头
	//协议名
    mqtt_txbuf[mqtt_txlen++] = 0;        	// Protocol Name Length MSB    
    mqtt_txbuf[mqtt_txlen++] = 4;           // Protocol Name Length LSB    
    mqtt_txbuf[mqtt_txlen++] = 'M';        	// ASCII Code for M    
    mqtt_txbuf[mqtt_txlen++] = 'Q';        	// ASCII Code for Q    
    mqtt_txbuf[mqtt_txlen++] = 'T';        	// ASCII Code for T    
    mqtt_txbuf[mqtt_txlen++] = 'T';        	// ASCII Code for T    
	//协议级别
    mqtt_txbuf[mqtt_txlen++] = 4;        		// MQTT Protocol version = 4   对于 3.1.1 版协议,协议级别字段的值是 4(0x04)   
	//连接标志
    mqtt_txbuf[mqtt_txlen++] = 0xc2;        	// conn flags 
    mqtt_txbuf[mqtt_txlen++] = 0;        		// Keep-alive Time Length MSB    
    mqtt_txbuf[mqtt_txlen++] = 100;        	// Keep-alive Time Length LSB  100S心跳包    保活时间
	
    mqtt_txbuf[mqtt_txlen++] = BYTE1(ClientIDLen);// Client ID length MSB    
    mqtt_txbuf[mqtt_txlen++] = BYTE0(ClientIDLen);// Client ID length LSB  	
	memcpy(&mqtt_txbuf[mqtt_txlen],ClientID,ClientIDLen);
    mqtt_txlen += ClientIDLen;
    
    if(UsernameLen > 0)
    {   
        mqtt_txbuf[mqtt_txlen++] = BYTE1(UsernameLen);		//username length MSB    
        mqtt_txbuf[mqtt_txlen++] = BYTE0(UsernameLen);    	//username length LSB    
		memcpy(&mqtt_txbuf[mqtt_txlen],Username,UsernameLen);
        mqtt_txlen += UsernameLen;
    }
    
    if(PasswordLen > 0)
    {    
        mqtt_txbuf[mqtt_txlen++] = BYTE1(PasswordLen);		//password length MSB    
        mqtt_txbuf[mqtt_txlen++] = BYTE0(PasswordLen);    	//password length LSB  
		memcpy(&mqtt_txbuf[mqtt_txlen],Password,PasswordLen);
        mqtt_txlen += PasswordLen; 
    }    
	
  
    memset(mqtt_rxbuf,0,mqtt_rxlen);
    MQTT_SendBuf(mqtt_txbuf,mqtt_txlen);
    for(j=0;j<10;j++)
    {
        delay_ms(50);
        if(USART3_RX_FLAG)
        {
            memcpy((char *)mqtt_rxbuf,USART3_RX_BUFFER,USART3_RX_CNT);
            
            //memcpy
           
             for(i=0;i;i++)usart1_printf("%#x>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

6.2 mqtt.h代码

#ifndef __FY_MQTT_H_
#define __FY_MQTT_H_

#include "stm32f10x.h"
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdarg.h"
#include "delay.h"
#include "usart.h"

#define BYTE0(dwTemp)       (*( char *)(&dwTemp))
#define BYTE1(dwTemp)       (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp)       (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp)       (*((char *)(&dwTemp) + 3))
    
//用户名初始化
void OneNet_LoginInit(char *ProductKey,char *DeviceName,char *DeviceSecret);
//MQTT协议相关函数声明
u8 MQTT_PublishData(char *topic, char *message, u8 qos);
u8 MQTT_SubscribeTopic(char *topic,u8 qos,u8 whether);
void MQTT_Init(void);
u8 MQTT_Connect(char *ClientID,char *Username,char *Password);
void MQTT_SentHeart(void);
void MQTT_Disconnect(void);
void MQTT_SendBuf(u8 *buf,u16 len);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

6.3 main.c 主函数代码

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include 
#include "timer.h"
#include "esp8266.h"
#include "mqtt.h"

/*
序号	符号	编码
1	+	%2B
2	空格%20
3	/	%2F
4	?	%3F
5	%	%25
6	#	%23
7	&	%26
8	=	%3D
*/

//OneNet物联网服务器的设备信息
#define MQTT_ClientID "mq2"
#define MQTT_UserName "361594"

#define MQTT_PassWord "version=2018-10-31&res=products%2F361594%2Fdevices%2Fmq2&et=1597492895&method=sha1&sign=uqvA0KkjXw0FlN01aT6fWrGBLGw%3D"

//订阅与发布的主题
//格式:$sys/{产品ID}/{设备名称}/#
#define SET_TOPIC  "$sys/361594/mq2/#"  //订阅设备所有信息

//格式: $sys/{产品ID}/{设备名称}/dp/post/json
#define POST_TOPIC "$sys/361594/mq2/dp/post/json"  //发布

char mqtt_message[200];//上报数据缓存区

int main()
{
   u32 time_cnt=0;
   u32 i;
   u8 key;
   LED_Init();
   BEEP_Init();
   KEY_Init();
   USART1_Init(115200);
   TIMER1_Init(72,20000); //超时时间20ms
   USART3_Init(115200);//串口-WIFI
   TIMER3_Init(72,20000); //超时时间20ms
   USART1_Printf("正在初始化WIFI请稍等.n");
   if(ESP8266_Init())
   {
      USART1_Printf("ESP8266硬件检测错误.n");  
   }
   else
   {
      //加密端口
      //USART1_Printf("WIFI:%dn",ESP8266_STA_TCP_Client_Mode("OnePlus5T","1126626497","183.230.40.16",8883,1));
      
      //非加密端口
      USART1_Printf("WIFI:%dn",ESP8266_STA_TCP_Client_Mode("OnePlus5T","1126626497","183.230.40.96",1883,1));
  
   }
   
    //2. MQTT协议初始化	
    MQTT_Init(); 
    //3. 连接OneNet服务器        
    while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
    {
        USART1_Printf("OneNet服务器连接失败,正在重试...n");
        delay_ms(500);
    }
    USART1_Printf("OneNet服务器连接成功.n");
    
    //3. 订阅主题
    if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
    {
        USART1_Printf("主题订阅失败.n");
    }
    else
    {
        USART1_Printf("主题订阅成功.n");
    }        
    
    while(1)
    {    
        key=KEY_Scan(0);
        if(key==2)
        {
            time_cnt=0;
            sprintf(mqtt_message,"{"id":1,"dp":{"mq2":[{"v":50}]}}");
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("发送状态1rn");
        }
        else if(key==3)
        {
            time_cnt=0;
            sprintf(mqtt_message,"{"id":1,"dp":{"mq2":[{"v":80}]}}");
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("发送状态0rn");
        }  

        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='�';
            for(i=0;i;i++)>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

七、设备登录运行效果

登录成功之后,网页会显示在线状态。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

按下开发按键上传烟雾数据到服务器效果:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

工程完整源码下载:https://download.csdn.net/download/xiaolong1126626497/15803518

审核编辑:符乾江

;i++)usart1_printf("%#x>
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371050
  • OneNET
    +关注

    关注

    1

    文章

    52

    浏览量

    13791
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

    【应用】国产26MHz频率晶振应用于物联网WIFI物联网模块(串口转WiFi模块),Espressif(乐鑫)ESP8285/ESP8266芯片匹配测试OKESP8285其实是ESP8266的升级版
    的头像 发表于 11-21 15:37 4042次阅读
    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) <b class='flag-5'>ESP</b>8285/<b class='flag-5'>ESP8266</b>芯片案例

    ESP8266ESP32开发板常见的2种下载方式

    至240MHz CPU,而ESP8266是单核处理器,主频支持80MHz至160MHZ。 这些WiFi模块都带有GPIO,支持SPI,I2C,UART等各种协议。这两款芯片都有STA/AP/STA+AP的工作模式。E...
    的头像 发表于 11-10 20:30 309次阅读
    <b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32开发板常见的2种下载方式

    ESP8266ESP32开发板常见的2种下载方式

    协议,完整的 TCP/IP 协议栈以及蓝牙协议栈。用户可以使用这两款模块为现有的设备添加WIFI联网功能或蓝牙(ESP32),轻松的构建独立的网络控制器和远程控制监控设备。
    发表于 10-24 18:04

    使用esp8266连接onenet物联网平台报错MQTT_BAD_USERNAME_OR_PASSWORD怎么解决?

    在使用onenet_mqtt_init后就开始报错了
    发表于 09-12 07:40

    【RA4M2-SENSOR】—— 16.完结篇《使用AT指令通过MQTT远程控制RA4M2-SENSOR》

    上节我讲解了如何通过ESP8266的AT指令,使用MQTT协议连接远程物联网云,并将数据上传到手机端,这次我反其道而行之,使用手机或者MQTT
    发表于 09-01 14:31

    【RA4M2-SENSOR】—— 15. 使用AT指令连接MQTT云服务器上传数据

    上一节我已经实现了使用AT指令访问ESP8266连接心知天气网站获取天气预报,是通过HTTP协议来实现的。 ESP8266除了连接HTTP
    发表于 09-01 13:56

    【RA-Eco-RA6M4开发板评测】——7.使用RA6M4开发板通过MQTT实现远程IOT温度上传到手机,不限距离全世界级别

    *dataPtr = NULL; ESP8266_Init(); while(OneNet_DevLink() == 1)// 循环连接服务器 {delay_ms(500
    发表于 07-25 21:07

    第二十三章 W55MH32 MQTT_OneNET示例

    本文讲解了如何在 W55MH32 芯片上实现 MQTT 协议连接 OneNET 平台,通过实战例程展示了从准备工作、连接配置到消息订阅、发
    的头像 发表于 07-24 14:59 690次阅读
    第二十三章 W55MH32 <b class='flag-5'>MQTT_OneNET</b>示例

    【RA-Eco-RA6M4开发板评测】——4.使用ESP8266获取任意城市的天意预报

    手头上有一个ESP8266,闲置了很久,突然想起来可以和RA6M4开发板连接起来,使用AT指令来获取网络天气预报,于是就把它们连接起来。就有了这个帖子。 开始创建工程,打开 RA smart 配置
    发表于 07-23 19:50

    STM32+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    本教程将详细介绍如何将STM32微控制器与ESP8266Wi-Fi模块连接到机智云平台,实现温湿度数据的上传与继电器的远程控制。通过此过程,您将学会如何配置机智云平台,烧录ESP8266
    的头像 发表于 07-15 18:54 740次阅读
    <b class='flag-5'>STM32+esp8266</b><b class='flag-5'>连接</b>机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    【RA-Eco-RA4M2开发板评测】使用RA4M2和ESP8266实现MQTT协议上传传感器数据到云服务器并反向点灯控制

    刑事勘察,非常的智能化! 基于这样一个便捷的生活目的,我特地使用瑞萨的RA4M2开发板来做一个基于ESP8266 MQTT协议的IOT远程控制设备,它可以配合板子上搭载的传感器,比如温度,湿度
    发表于 05-29 15:29

    基于STM32 HAL库与标准库的esp8266接入机智云方案(二)

    在《基于STM32HAL库与标准库的esp8266接入机智云方案(一)》中,我们详细介绍了硬件连接和机智云客户端的创建。本篇将重点讲解如何下载代码、分析下载的代码,并直接使用这些代码连接
    的头像 发表于 05-28 18:02 1102次阅读
    基于<b class='flag-5'>STM32</b> HAL库与标准库的<b class='flag-5'>esp8266</b>接入机智云方案(二)

    ESP8266烧录与机智云一键配网教程

    ESP8266模块因其低成本和高性能,广泛应用于智能家居和工业自动化等领域。机智云平台提供了一键配网功能,简化了设备的联网过程。本教程将详细介绍如何使用ESP8266进行烧录,并通过机智云实现一键配
    的头像 发表于 05-24 11:04 1545次阅读
    <b class='flag-5'>ESP8266</b>烧录与机智云一键配网教程

    零知开源——ESP8266+MPU6050 实现运动姿态检测

    零知ESP8266的I2C通信        在运动姿态检测、机器人平衡控制、VR头戴设备等应用中,MPU6050(三轴加速度计+三轴陀螺仪)是一个常见的姿态传感器。而ESP8266作为一款低功耗
    的头像 发表于 02-20 17:54 2798次阅读
    零知开源——<b class='flag-5'>ESP8266</b>+MPU6050 实现运动姿态检测

    STM32ESP32应该学哪个

    等等,市场占有率也很高。 ESP32相对年轻了不少,满打满算也不到 10 岁,他的前身,还得从 ESP8266 说起,都属于乐鑫科技的产品。 如果你用单片机做过一些物联网产品,那多多少少应该听过 ESP8266,这是一个非常常见
    的头像 发表于 02-18 09:52 1112次阅读