4G模块接入阿里云-实现数据上传和命令下发

功能介绍:
使用4G模块EC600S和32单片机实现接入阿里云服务器,上传光照数据和下发命令控制LED灯(PC13),同时可以打电话、发短信。

前期准备:
1、首先你得有一个阿里云的账号,没有的话就注册一个
2、在物联网平台创建产品和设备
附上参考文章:AT指令接入阿里云

主要硬件准备:
1、STM32F103C8T6最小系统板
2、4G模块,我使用的是EC600S(适用于移动、联通、电信卡)
3、光照强度传感器BH1750

模块接线:
4G模块EC600S:
VCC–5V GND–GND TX–PA3 RX–PA2
光照强度传感器BH1750:
VCC–3.3V GND–GNG SCL–PB6 SDA–PB7 ADDR–不接

演示阶段:
实物图
在这里插入图片描述
串口助手输出信息
在这里插入图片描述
在这里插入图片描述
成功接入阿里云,设备显示在线
在这里插入图片描述
成功上传光照数据和LED灯状态
在这里插入图片描述
在线调试里可以下发控制命令
在这里插入图片描述
查看自己是否订阅成功
在这里插入图片描述
开发Web应用和移动应用,可以上物联网应用开发控制台 应用开发链接
简单开发的手机应用
在这里插入图片描述
代码需要修改的地方
1、三元组和手机号码
在这里插入图片描述
阿里云三元组获取方式:
在这里插入图片描述
2、数据流名(标识符)修改
将Light、LED修改为你的标识符在这里插入图片描述
标识符查看方式:
在这里插入图片描述
部分代码实现:
数据上传部分代码
每隔3S上传一次光照数据
在这里插入图片描述
命令的下发部分代码
在串口2中断服务函数中,通过“version”字符串判断有没有接收到下发的命令,如果是下发,串口2就会接收到这样一长串的字符串:

+QMTRECV: 0,0,"/sys/a1VPyJEJRjJ/test01/thing/service/property/set",92,"{"method":"thing.service.property.set","id":"44777986","params":{"LED":1},"version":"1.0.0"}"

收到下发的命令后,将U2_RX_Cmd置1在main()中指向命令和上传LED灯状态。
在这里插入图片描述
有时发布消息时会出错,出错时串口2会接收到字符串“EEOR”。发生错误时,我们可以试着重连阿里云。
在这里插入图片描述
发短信和打电话可以直接调用这两个函数即可

	EC600S_SendMsg(Phone,Message);  //发短信
	EC600S_CallPhone(Phone);        //打电话

main.c文件

/*
4G模块EC600S接入阿里云--实现数据上传和命令下发
模块接线:
4G模块EC600S:
VCC--5V  GND--GND  TX--PA3  RX--PA2
光照强度传感器BH1750: 
VCC--3.3V  GND--GNG  SCL--PB6  SDA--PB7  ADDR--不接
*/
#include <stm32f10x.h>
#include <stdbool.h>
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "bh1750.h"
#include "EC600S.h"

//三元组
#define PRODUCTKEY 		 "a1VPyJEJRjJ"
#define DEVICENAME  	 "test01"
#define DEVICESECRET     "e7da0d4274b9da4ded7b7e90ad4178be"

//手机号码和短信内容
#define Phone            "10086"
#define Message          "Thank"

int main(void)
{
	float light;     //光照值
	char dataBuf[36]; //存储数据
	unsigned short timeCount = 300;	//发送间隔变量
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC优先级分组
	SysTick_Init(72);  //初始化延时函数
	LED_init(); //初始化LED PC13
	BH1750_Init();//初始化光照传感器
	USART1_Init(115200);	//初始化串口1--调试用
	USART2_Init(115200);	//初始化串口1--EC600S使用

	EC600S_Init();    //初始化EC600S模块
	EC600S_CONNECT_MQTT_SERVER(PRODUCTKEY,DEVICENAME,DEVICESECRET); //连接阿里云服务器

	// EC600S_SendMsg(Phone,Message);  //发短信
	// EC600S_CallPhone(Phone);        //打电话
	
	while(1)
	{
		delay_ms(10);
		if(timeCount++ >= 300)	//发送间隔3s
		{
			timeCount = 0;
			light =  LIght_Intensity();	//读取光照强度的值
			
			memset(dataBuf,0,36);
			sprintf(dataBuf,"{params:{Light:%.1f}}",light);      //将数据打包json格式
			EC600S_MQTT_SEND_DATA(PRODUCTKEY,DEVICENAME,dataBuf); //发布主题消息
		}	
		if(U2_RX_Cmd==1)		//接收到数据
		{
			U2_RX_Cmd = 0;       //重新置为0
			printf("串口2:收到服务器下发数据:\r\n");
			if(strstr((const char*)U2_RX_BUF,(const char*)"{\"LED\":1}"))
			{
				LED0 = 0;  //低电平开灯
				printf("LED灯已打开\r\n");
			}
			else if(strstr((const char*)U2_RX_BUF,(const char*)"{\"LED\":0}"))
			{
				LED0 = 1;   //高电平关灯
				printf("LED灯已关闭\r\n");
			}
			memset(U2_RX_BUF, 0, sizeof(U2_RX_BUF));  //清空串口2缓冲区
			
			//上传LED灯的状态
			memset(dataBuf,0,36);
			sprintf(dataBuf,"{params:{LED:%d}}",!LED0_STA);     //将数据打包json格式
			EC600S_MQTT_SEND_DATA(PRODUCTKEY,DEVICENAME,dataBuf);//发布主题消息
		}			
		
		//接收到错误,重连阿里云
		if(U2_RX_Error==1)
		{
			U2_RX_Error = 0;   //重新置为0
			printf("接收到错误,重连阿里云....\r\n");
			EC600S_CONNECT_MQTT_SERVER(PRODUCTKEY,DEVICENAME,DEVICESECRET);//连接阿里云服务器
		}
	}
}

最后:
需要源码的可以自行下载。代码下载链接
下载操作:
在这里插入图片描述

要将STM32接入阿里云平台实现数据上传命令下发,首先需要进行以下步骤。 1. 准备硬件:选择合适的STM32开发板,并连接必要的传感器或执行器。确保能够通过STM32从设备获取所需的数据或执行相应的操作。 2. 创建阿里云账号:在阿里云官网注册账号并登录。 3. 创建物联网平台实例:进入物联网平台控制台,在实例列表中点击"创建实例"按钮。根据实际需求选择合适的计费方式、区域规格,然后点击"创建"完成实例创建。 4. 创建产品设备:在物联网平台控制台,点击"设备管理",然后点击"创建产品"。填写产品名称、节点类型、数据格式等信息。创建产品后,点击产品详情页面中的"设备管理",再点击"添加设备",填写设备名称设备标识码,并将设备与产品进行绑定。 5. 编写STM32代码:使用合适的开发环境编写STM32代码,实现阿里云平台的通信。需要安装并使用阿里云提供的物联网软件开发套件(SDK),通过SDK提供的API实现数据上传命令下发功能。 6. 配置设备连接参数:在STM32代码中配置设备连接参数,包括设备的产品Key、设备Key、设备密钥等。这些参数可以在物联网平台控制台的"设备管理"页面中找到。 7. 数据上传:使用SDK提供的API,将STM32获取到的数据封装成阿里云平台所定义的数据格式,然后通过SDK的数据上传接口将数据发送到阿里云平台。 8. 命令下发阿里云平台提供了远程管理设备的功能,可以通过控制台或API发送命令给设备。在STM32代码中,使用SDK提供的命令接收接口来接收来自阿里云平台的命令,并根据命令内容执行相应的操作。 通过以上步骤,我们可以实现STM32阿里云平台的连接,实现数据上传命令下发的功能。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁽⁽ଘ晴空万里ଓ⁾⁾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值