基于STM32+华为云IOT的智能称重系统设计

首页 » 物联网 » 基于STM32+华为云IOT的智能称重系统设计

本文分享自华为云社区“基于STM32+华为云IOT设计智能称重系统”,作者DS小龙哥。

随着网络技术、各种通信技术和传感器技术的快速发展,物联网技术已经成为当今技术领域中一项快速发展的技术。物联网技术的核心还是基于互联网技术。物联网是新一代信息技术的重要组成部分,是信息时代的重要发展阶段。物联网通过智能感知、识别技术、普适计算等通信传感技术广泛应用于网络融合,因此被称为继计算机、互联网之后的第三次世界信息产业发展浪潮。

本设计的模型来自物流、矿山、高速公路等场合,需要对车辆称重场所进行智能化升级。设计了基于物联网的智能在线称重方案,开发了智能称重控制器,合理选择和部署了多个重量传感器和必要的算法,通过WIFF通信模块和GPS定位模块采集车辆重量数据-地理位置信息,并通过网络发送到云平台,设计了图形化UI界面显示称重和地图定位等重要信息,实现了称重系统的远程监控。

随着物联网技术的逐步发展和成熟,物联网技术是一项庞大而广泛的应用技术,而不仅仅是一种延伸应用。相信地磅会有更多创新的应用实践。总的来说,地磅的现代化、信息化、智能化必然伴随着物联网技术的发展,物联网技术的发展也将推动地磅新的技术革命。

1.设计技术和硬件选项概述:

(1)云通信模块采用ESP8266-WIFI。

(2)联网通信模块采用ESP8266。

(3)GPS模块:采用ATGM336H双模GPS模块。

(4)电子秤模块:用于称重。

(5)物联网云平台:采用华为云物联网平台。

设计总结:

(1)通过ESP8266连接OneNet,将称重数据和GPS数据上传到云端(采用HTTP协议)

云端显示两种数据:GPS定位数据——地图显示,称重传感器数据值。

(2)三个称重传感器与一个秤相连,称重并计算平均值。

(3)本地有机发光二极管显示屏显示GPS的经纬度数据和称重传感器的数据值。

(4)有机发光二极管设计页面显示和设置当前报警上限。通过按键加减。

当称重阈值超过设定阈值时,蜂鸣器会发出警报。

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

2. 硬件选型

2.1 STM32F103C8T6

STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。

基于STM32+华为云IOT的智能称重系统设计

2.2 电子秤传感器

基于STM32+华为云IOT的智能称重系统设计

HX711 是一款专为高精度称重传感器而设计的24位A/D 转换器芯片。

2.3 ESP8266-wifi

基于STM32+华为云IOT的智能称重系统设计

2.4 GPS模块

基于STM32+华为云IOT的智能称重系统设计

2.5 蜂鸣器

基于STM32+华为云IOT的智能称重系统设计

3. 创建云端产品与设备

3.1 创建产品

地址:https://www.huaweicloud.com/?locale=zh-cn

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

3.2 创建设备

地址: https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

3.3 自定义模型数据

链接:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-dev/all-product/7211833377cf435c8c0580de390eedbe/product-detail/6277d70223aaf461a0f72a56
这个模型数据就是设备要上传的数据。

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

{
    "device_id": "6277d70223aaf461a0f72a56_weigh",
    "secret": "12345678"
}

服务ID: weigh
属性名称	数据类型	访问方式	描述	    
weigh	   int(整型)	可读	   重量	      
GPS	   string(字符串)	可读	  GPS定位信息

3.4 MQTT密匙生成

创建完产品、设备之后,接下来就需要知道如何通过MQTT协议登陆华为云服务器。

官方的详细介绍在这里:
https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112

属性上报格式:
https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

MQTT设备登陆密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

DeviceId 		6277d70223aaf461a0f72a56_weigh
DeviceSecret 	12345678
ClientId		6277d70223aaf461a0f72a56_weigh_0_0_2022050814
Username		6277d70223aaf461a0f72a56_weigh
Password       0a3d097c6449b8526a562006a74c8c5e61ce63d6c831ea291560736a3332cf77

华为云物联网平台的域名是: 161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com
华为云物联网平台的IP地址是:121.36.42.100
在软件里参数填充正确之后,就看到设备已经连接成功了。
接下来打开设备页面,可以看到设备已经在线了。

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

3.5 主题订阅与发布

//订阅主题: 平台下发消息给设备
$oc/devices/6277d70223aaf461a0f72a56_weigh/sys/messages/down
//设备上报数据
$oc/devices/6277d70223aaf461a0f72a56_weigh/sys/properties/report
//上报的属性消息 (一次可以上报多个属性,在json里增加就行了)
{"services": [{"service_id": "weigh","properties":{"GPS":"lat:12.345,lng:45.678"}}]}

通过MQTT客户端软件模拟上报测试:

基于STM32+华为云IOT的智能称重系统设计

查看控制台页面,数据已经上传成功了。

基于STM32+华为云IOT的智能称重系统设计

3.6 应用侧开发

为了更方便的展示设备数据,与设备完成交互,还需要开发一个配套的上位机,官方提供了应用侧开发的API接口、SDK接口,为了方便通用一点,我这里采用了API接口完成数据交互,上位机软件采用QT开发。

帮助文档地址: https://support.huaweicloud.com/api-iothub/iot_06_v5_0034.html

设备属性就是设备上传的传感器状态数据信息,应用侧提供了API接口,可以主动向设备端下发请求指令;设备端收到指令之后需要按照约定的数据格式上报数据;所以,要实现应用层与设备端的数据交互,需要应用层与设备端配合才能完成。

基于STM32+华为云IOT的智能称重系统设计

基于STM32+华为云IOT的智能称重系统设计

在使用接口时,最好先使用华为自己的调试接口测试。
https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ListProperties

基于STM32+华为云IOT的智能称重系统设计

上位机软件采用Qt框架设计,Qt是一个跨平台的C++图形用户界面应用程序框架。Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。简单来说,QT可以很轻松的帮你做带界面的软件,甚至不需要你投入很大精力。

QT官网: https://www.qt.io/

基于STM32+华为云IOT的智能称重系统设计

4. STM32设备端开发

4.1 程序下载

基于STM32+华为云IOT的智能称重系统设计

4.2 原理图

基于STM32+华为云IOT的智能称重系统设计

4.3 硬件接线

(1)OLED显示屏接线:
D0----(SCK)------------------->>PB14
D1----(MOSI)------------------>>PB13
RES—(复位脚低电平有效)-------->>PB12
DC--(数据和命令控制管脚)------>>PB1
CS--(片选引脚)---------------->>PA7
GND--------------------------->>GND
VCC--------------------------->>3.3V或者5V

(2)ATK-ESP8266 WIFI接线
PA2(TX)--RXD 模块接收脚
PA3(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)

(3)外接蜂鸣器模块: 高电平响
BEEP----->PB8

(4)外接按键:
KEY1 -PB3 按下是低电平  清零
KEY2 -PB2 按下是低电平  翻页
KEY3 -PB6 按下是低电平  加
KEY4 -PB7 按下是低电平  减

(5)外接LED灯模块:
LED1-PB4 低电平亮
LED2-PB5 低电平亮

(6)称重传感器1
VCC--->5V
SCK--->PA4   时序控制脚--对STM32--输出模式
DT---->PA5   输出输出脚-对STM32--输入模式
GND--->GND

(7)称重传感器2
VCC--->5V
SCK--->PA11   时序控制脚--对STM32--输出模式
DT---->PA12   输出输出脚-对STM32--输入模式
GND--->GND

(8)称重传感器3
VCC--->5V
SCK--->PA6   时序控制脚--对STM32--输出模式
DT---->PA8   输出输出脚-对STM32--输入模式
GND--->GND

(9)GPS模块接线说明
GND----GND
VCC---3.3V
PB11----GPS_TX
PB10----GPS_RX

(--)板载LED灯:低电平亮
LED1--PC13  
BEEP2--PC14

(--)板载按键: 
KEY1--PA0  按下为高电平

4.4 MQTT连接代码

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

//华为物联网服务器的设备信息
#define MQTT_ClientID "61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510"
#define MQTT_UserName "61b9ba3a2b2aa20288c1e7f1_QQ1126626497"
#define MQTT_PassWord "385ce91dfe7da5b7431868d5d87e7998163c493344040935d5a00024d6324242"

//订阅与发布的主题
#define SET_TOPIC  "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/messages/down"  //订阅
#define POST_TOPIC "$oc/devices/61b9ba3a2b2aa20288c1e7f1_QQ1126626497_0_0_2021121510/sys/properties/report"  //发布

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
   USART2_Init(9600);//串口-蓝牙
   TIMER2_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("CMCC-Cqvn","99pu58cb","121.36.42.100",1883,1));
  
   }
   
    //2. MQTT协议初始化	
    MQTT_Init(); 
    //3. 连接华为服务器        
    while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
    {
        USART1_Printf("服务器连接失败,正在重试...n");
        delay_ms(500);
    }
    USART1_Printf("服务器连接成功.n");
    
    //3. 订阅主题
    if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
    {
        USART1_Printf("主题订阅失败.n");
    }
    else
    {
        USART1_Printf("主题订阅成功.n");
    }        
    
    .........

4.5 ESP8266代码

#include "esp8266.h"
u8 ESP8266_IP_ADDR[16]; //255.255.255.255
u8 ESP8266_MAC_ADDR[18]; //硬件地址
/*
函数功能: ESP8266命令发送函数
函数返回值:0表示成功  1表示失败
*/
u8 ESP8266_SendCmd(char *cmd)
{
    u8 i,j;
    for(i=0;i"))
                {
                    //继续发送数据
                    USARTx_DataSend(USART3,data,len);
                    //等待数据发送成功
                    for(n=0;n")))
       {
            return 11;
       }
        //如果想要退出发送:  "+++"
    }
    
     //打印总体信息
    USART1_Printf("当前WIFI模式:STA+TCP客户端n");
    USART1_Printf("当前连接的WIFI热点名称:%sn",ssid);
    USART1_Printf("当前连接的WIFI热点密码:%sn",pass);
    USART1_Printf("当前连接的TCP服务器端口号:%dn",port);
    USART1_Printf("当前连接的TCP服务器IP地址:%sn",ip);
    return 0;
}
/*
函数功能: TCP客户端模式下的发送函数
发送指令: 
*/
u8 ESP8266_ClientSendData(u8 *data,u16 len)
{
    u8 i,j,n;
    char ESP8266_SendCMD[100]; //组合发送过程中的命令
    for(i=0;i"))
                {
                    //继续发送数据
                    USARTx_DataSend(USART3,data,len);
                    //等待数据发送成功
                    for(n=0;n

本文章来源于互联网,如有侵权,请联系删除!

相关推荐: OneNET Studio云平台STM32物联网开发(1)- MQTT协议设备接入数据上报测试

实现效果视频 OneNET Studio MQTT协议数据上报测试 本章节教学视频 OneNETStudio云STM32 MQTT接入数据上报 本章资料下载:MQTTX-Setup-1.8.2-x64/token小工具-单片机文档类资源-CSDN下载 如图1手…