STM32连上Aliyun

1、首先你得有一个阿里云的账号,没有的话就注册一个

2、找到物联网平台

3、选择华东2,点击公共实例

4、创建产品

5、给产品添加设备,这里添加两个设备,将stm32 上面的温湿度数据传到MQTTFX上面

6、回到产品处自定义一个既能发布又能订阅的Topic类列表

7、创建一个云产品流转规则,目的是将上传到服务器的数据发布出去供别的产品订阅(注:现在aliyun版本更新了,点击右上角切回旧版即可

8、编辑这个云产品流转规则,定义消息的源头以及消息的目的地

启用这个云产品流转,启用之后才会运行

9、连接测试,找到设备,点击查看,一键复制设备证书,粘贴到 技小新 MQTT编程工具,自动生成连接Aliyun信息

技小新MQTT编程工具链接

链接:https://pan.baidu.com/s/14C55cnRO3C0G5gnN95JKWw

提取码:o24i

将上面的信息复制到MQTT.FX工具上面

点击连接,可见连接成功,说明我们创建的设备没有问题,可以以同样的方法测试另外一个设备是否成功

10、让单片机通过wifi模块连接无线网并登录Aliyun的MQTT服务器并上传数据

这里我是在GitHub上找到一份源码,并在这源码的基础上面做的修改,让单片机成功连接上Aliyun服务器,这里放上源码链接,大家可以自己动手实践

链接:https://pan.baidu.com/s/1SZxNs0AUkwFHrrUvM2Nwkg

提取码:0nqu

具体修改过程如下:

在登录MQTT服务器函数处填上WIFI的连接信息和用技小新MQTT工具生成的基本信息,这里在源工程上加以改进,使用宏定义的方式方便修改;并将联网登录服务器部分封装成一个函数。

联网部分:填上联网信息和登录阿里云设备信息

 

void Mqtt_Connect(void)
{
	sta=0;
	if(_net.Init(rxbuf,sizeof(rxbuf),txbuf,sizeof(txbuf))!=0) 	//检查ESP8266
	{
		printf("\nNet Init OK!\r\n");
		sta++;
	}
	else
	{
		printf("\nNet Init Error!\r\n");
		sta=0;
	}
	if(sta==1)  		//连接热点
	{
		if(_net.ConnectAP(WIFI_NAME,WIFI_PASSWD)!=0)
		{
			printf("Conncet AP OK!\r\n");
			sta++;
		}
		else 
		{
			printf("Conncet AP Error!\r\n");
			sta=0;
		}
	}
	if(sta==2)      //连接TCP
	{	
		if(_net.ConnectServer("TCP",MQTT_BROKERADDRESS,1883)!=0) 
		{
			printf("Conncet Server OK!\r\n");
			sta++;
		}
		else
		{
			printf("Conncet Server Error!\r\n");	
		}
	}
	if(sta==3)  	//登录MQTT	
	{
		_mqtt.Init(rxbuf,sizeof(rxbuf),txbuf,sizeof(txbuf));

		if(_mqtt.Connect(
		MQTT_CLIENTID, //ClientID
		MQTT_USARNAME, //Username
		MQTT_PASSWD    //Password
		) != 0)
		{
			printf("Enter MQTT OK!\r\n");
			sta++;
		}
		else
		{
			printf("Enter MQTT Error!\r\n");
			sta=0;
		}	
	}	
	if(sta==4)  		//订阅主题
	{
		if(_mqtt.SubscribeTopic(MQTT_SUBSCRIBE_TOPIC,0,1) != 0)
		{
			printf("SubscribeTopic OK!\r\n");
		}
		else
		{			
			printf("SubscribeTopic Error!\r\n");
		}
	}
	sta = 0;
}

主函数部分:填写需要上传的数据

int main(void)
{
	u16 cnt_5s=0;
	u8 temperature=0,humidity=0;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init();
	Usart1_Configuration(115200);
	Usart2_Configuration(115200);

	DHT11_Init();

	delay_ms(100);
	
	Mqtt_Connect();
	
	while(1)
	{
		DHT11_Read_Data(&temperature, &humidity);	//读取温湿度值
		//printf("温度:%d℃\r\n湿度:%d%%RH\r\n", temperature, humidity);

		if(++cnt_5s>=80)
		{
			cnt_5s=0;
			sprintf(mqtt_message,
			"{\
				\"temp\":%d,\
				\"humi\":%d\
			}",
			temperature,
			humidity
			);
			_mqtt.PublishData(CUSTOMIZE_TOPIC,mqtt_message,0);			
		}
  }
}

编译后将程序烧录到单片机之后,打开手机热点,可见连接服务器成功

11、用MQTT.FX订阅单片机发布的信息

至此就完成了利用Aliyun发布数据并订阅数据,就可以自己设计一个APP或者网页去订阅单片机发布的数据。

按照上面修改的完整的工程 ,有需要的可以下载支持一下。

mqtt登不上去可能的原因:

1、模组原因:我用正点原子wifi模组和小熊派wifi模组都已验证可以使用;

2、供电问题:wifi模块必须得有一个稳定的电压,有的板子直接用一个USB供电可能不行;

3、频段问题:热点的频段得是2.4g,5g可能不行;

4、热点问题:热点名不能是中文,密码最好是8位,校园网可能不行,信号太弱了可能也也不行;

5、格式问题:注意看清楚 "tcp"、":"、"1883" 这些字段到底是有还是没有

友情推荐和我这篇相关的内容

【阿里云IOT】补充课程20分钟手把手教你多个设备对接阿里云实现互联

【7天Java0基础速成安卓开发

(二)STM32上传数据到阿里云网页

(三)STM32上传数据网页以及手机

stm32 app 连上阿里云

Logo

获得宣传、场地、资金和创业导师资源

更多推荐