基于stm32及sim800c sim868 实现的远程控制 小程序控制模块 源码 移植过程简介

本文基本公开了如何移植MQTT物联网协议到STM32平台上,并结合GPRS模块(SIM800C/SIM900A/SIM868等)实现publish和订阅topic从onenet,阿里云,百度云等。如果不想移植,可以在如下淘宝链接中直接购买源代码,全部源码+资料300,全部源码+资料包售后500元。

物联网开发板裸板只要168,套餐可自己搭配。

淘宝链接:https://item.taobao.com/item.htm?spm=a2126o.11854294.0.0.120c4831Ic87Zt&id=598106907055

配套物联网开发板链接:https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.29e71debNLqzWg&id=583890254748

当然,也承接定制开发,价格跟需求难度及开发周期相关,具体可小窗博主或淘宝咨询。

一、代码适用范围

1. 设备端:

  • 主控芯片为STM32F103C8T6,但是兼容所有STM32芯片中。
  • 通信模块为sim800c或sim868,代码兼容,868多个GPS 使能代码和获取GPS信息及解析代码。
  • 主控与通信模块连接4个引脚:GPS使能,GPRS使能,及串口3 TXD和RXD。串口3用于通信。

2. 服务器:

  • 支持onenet
  • 支持aliyun
  • 支持baiduyun

3. 手机端:

  • 小程序:目前已开发onenet,获取数据流,数据点,topic订阅与发布,控制终端等功能。aliyun,baiduyun待开发。
  • app:用开源标准的mqtt 协议 apk。

二、MQTT 物联网协议使用

1. MQTT协议简介:

     MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的,已成为 IoT 通信的标准。

     初识 MQTT  IBM简介的很好:我就不多分享了,有兴趣的可以参考链接:

     https://www.ibm.com/developerworks/cn/iot/iot-mqtt-why-good-for-iot/index.html

2. 分享一个很好用的mqtt库:Paho

     设备端的mqtt协议移植,就是参考https://github.com/eclipse/paho.mqtt.embedded-c移植而来。

     整体移植过程:

     下载src源码:https://github.com/eclipse/paho.mqtt.embedded-c/tree/master/MQTTPacket/src

      

      添加到keil工程中。

      添加onenet、aliyun、baiduyun等调试接口,以及sim模块,at指令控制部分,调试代码。

      调试过程过于复杂且消耗时间,这里就不详细说明了。

      这里贴一张移植后的目录结构图:

      

      测试aliyun,baiduyun,onenet验证皆OK。

      设备端验证代码publish 稳定,测试三天未掉线。

3. 以onenet为例:

      设备端连接onenet:只需修改:如下部分即可。分别对应onenet服务器端的设备id,产品id和api-key。

      

4. 小程序demo

      源程序实现如下功能:

  • 添加设备
  • 二维码识别获取设备id
  • 显示继电器状态
  • 获取设备数据流
  • 发送topic
  • 远程控制继电器

小程序需要修改部分:

  • appid:修改为自己申请小程序后,生成的appid。

       

  • master-apikey,改为onenet创建产品后生成的master-apikey即可。

        

        然后就可以编译测试。

三、实现效果

1. 设备端:

  上电,开机设备初始化,联网,tft屏显示二维码。

2. 服务器端:

  onenet/aliyun/baiduyun起到数据接收与转发作用。

3. 手机端:

  打开小程序,显示添加设备页面。

  

  点击添加设备后,会出现二维码扫描页面,扫描设备上的二维码后,即可出现控制页面:

  

  点击按钮即可控制设备端的继电器开关,从而控制led或电机或风扇等的开关。

        如有疑问,欢迎评论或淘宝详聊。

以下是使用STM32SIM800C模块发送短信的基本代码示例。请注意,您需要根据您的具体需求进行修改、测试和调试。 ```c #include "stm32f10x.h" #include "stdio.h" #include "string.h" // 定义SIM800C模块的UART口 #define SIM800C_USART USART1 // 定义缓冲区大小 #define MAX_BUFFER_SIZE 500 // 定义发送短信的命令 char SEND_SMS[] = "AT+CMGS=\"+86138xxxxxxxx\"\r\n"; // 定义接收到短信回复的标志 char SMS_REPLY[] = ">"; // 定义存储接收到的数据的缓冲区 char buffer[MAX_BUFFER_SIZE]; // 定义接收到的数据的长度 uint16_t buffer_len = 0; // 定义发送短信的函数 void SendSMS(char* message) { // 清空缓冲区 memset(buffer, 0, MAX_BUFFER_SIZE); buffer_len = 0; // 发送短信命令 USART_SendData(SIM800C_USART, SEND_SMS); // 等待接收到短信回复的标志 while(strstr(buffer, SMS_REPLY) == NULL); // 发送短信内容 USART_SendData(SIM800C_USART, message); USART_SendData(SIM800C_USART, 0x1A); // 发送结束符 // 等待接收到短信发送结果 while(strstr(buffer, "OK") == NULL); } // 定义接收数据的回调函数 void USART1_IRQHandler(void) { if(USART_GetITStatus(SIM800C_USART, USART_IT_RXNE) != RESET) { uint16_t data = USART_ReceiveData(SIM800C_USART); buffer[buffer_len++] = (char)data; } } int main(void) { // 初始化SIM800C模块的UART口 USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(SIM800C_USART, &USART_InitStructure); USART_Cmd(SIM800C_USART, ENABLE); // 注册接收数据的回调函数 USART_ITConfig(SIM800C_USART, USART_IT_RXNE, ENABLE); NVIC_EnableIRQ(USART1_IRQn); // 发送短信 SendSMS("Hello, world!"); while(1) { // 主循环中可以进行其他操作 } } ``` 需要注意的几个问题: 1. SIM800C模块的UART口波特率需要与代码中的一致。 2. 发送短信的目标号码需要根据实际情况修改。 3. 发送短信内容需要使用ASCII码发送,而且结尾必须是0x1A。 另外,如果您使用的是不同型号的SIM模块,可能需要修改命令和回复标志。建议先查阅模块的AT指令手册。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dingdongkk

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

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

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

打赏作者

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

抵扣说明:

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

余额充值