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

发布者:心灵之舞最新更新时间:2024-03-26 来源: elecfans关键字:STM32  智能称重系统 手机看文章 扫描二维码
随时随地手机看文章

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


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


随着物联网技术的逐步发展和日趋成熟,物联网技术是一个大而广的应用技术,并非仅仅局限于延伸应用。相信对地磅来说必然会有更多创新的应用实践。总的来说,地磅现代化、信息化、智能化一定紧随物联网技术的发展,而物联网技术的发展也必将促使地磅兴起新的技术革命。

设计的技术与硬件选项总结:

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

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

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

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

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

设计总结:

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

云端上显示2个数据:GPS定位数据–地图显示,称重传感器的数据值

(2)3个称重传感器接一个秤面称重计算平均值

(3)本地OLED显示屏显示GPS经纬度数据、称重传感器的数据值。

(4)OLED设计一个页面显示并设置当前的报警上限。通过按键进行加减

当称重的阀值超出了设置阀值,蜂鸣器报警。

image-20220423172247041.png?imageView2/2/w/1000


image-20220423172310175.png?imageView2/2/w/1000


image-20220423172332897.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000

2. 硬件选型

2.1 STM32F103C8T6

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

image-20220420111635569.png?imageView2/2/w/1000

2.2 电子秤传感器

image-20220421100325942.png?imageView2/2/w/1000

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

2.3 ESP8266-wifi

image-20220420112202167.png?imageView2/2/w/1000

2.4 GPS模块

image-20220420131853905.png?imageView2/2/w/1000

2.5 蜂鸣器

image-20220415203419349.png?imageView2/2/w/1000

3. 创建云端产品与设备

3.1 创建产品

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

image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000

3.2 创建设备

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

image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000

3.3 自定义模型数据

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

image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000

{
    '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

image.png?imageView2/2/w/1000image.png?imageView2/2/w/1000

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

image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000

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
在软件里参数填充正确之后,就看到设备已经连接成功了。
接下来打开设备页面,可以看到设备已经在线了。

image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000

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客户端软件模拟上报测试:

image.png?imageView2/2/w/1000


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

image.png?imageView2/2/w/1000

3.6 应用侧开发

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

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

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

image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000

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

image.png?imageView2/2/w/1000

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

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

image.png?imageView2/2/w/1000

4. STM32设备端开发

4.1 程序下载

image-20220423172434570.png?imageView2/2/w/1000

4.2 原理图

image-20220423172622099.png?imageView2/2/w/1000

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<10;i++) //检测的次数--发送指令的次数

    {

        USARTx_StringSend(USART3,cmd);

        for(j=0;j<100;j++) //等待的时间

        {

            delay_ms(50);

            if(USART3_RX_FLAG)

            {

                USART3_RX_BUFFER[USART3_RX_CNT]='';

                USART3_RX_FLAG=0;

                USART3_RX_CNT=0;

                if(strstr((char*)USART3_RX_BUFFER,'OK'))

                {

                    return 0;

                }

            }

        }

    }

    return 1;

}


/*

函数功能: ESP8266硬件初始化检测函数

函数返回值:0表示成功  1表示失败

*/

u8 ESP8266_Init(void)

{

    //退出透传模式

    USARTx_StringSend(USART3,'+++');

    delay_ms(50);

    return ESP8266_SendCmd('ATrn');

}


/*

函数功能: 一键配置WIFI为AP+TCP服务器模式

函数参数:

char *ssid  创建的热点名称

char *pass  创建的热点密码 (最少8位)

u16 port    创建的服务器端口号

函数返回值: 0表示成功 其他值表示对应错误值

*/

u8 ESP8266_AP_TCP_Server_Mode(char *ssid,char *pass,u16 port)

{

    char *p;

    u8 i;

    char ESP8266_SendCMD[100]; //组合发送过程中的命令

    /*1. 测试硬件*/

    if(ESP8266_SendCmd('ATrn'))return 1;

    /*2. 关闭回显*/

    if(ESP8266_SendCmd('ATE0rn'))return 2;

    /*3. 设置WIFI模式*/

    if(ESP8266_SendCmd('AT+CWMODE=2rn'))return 3;

    /*4. 复位*/

    ESP8266_SendCmd('AT+RSTrn');

    delay_ms(1000);

    delay_ms(1000);

    delay_ms(1000);

    /*5. 关闭回显*/

    if(ESP8266_SendCmd('ATE0rn'))return 5;

    /*6. 设置WIFI的AP模式参数*/

    sprintf(ESP8266_SendCMD,'AT+CWSAP='%s','%s',1,4rn',ssid,pass);

    if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;

    /*7. 开启多连接*/

    if(ESP8266_SendCmd('AT+CIPMUX=1rn'))return 7;

    /*8. 设置服务器端口号*/

    sprintf(ESP8266_SendCMD,'AT+CIPSERVER=1,%drn',port);

    if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;

    /*9. 查询本地IP地址*/

    if(ESP8266_SendCmd('AT+CIFSRrn'))return 9;

    //提取IP地址

    p=strstr((char*)USART3_RX_BUFFER,'APIP');

    if(p)

    {

        p+=6;

        for(i=0;*p!=''';i++)

        {

            ESP8266_IP_ADDR[i]=*p++;

        }

        ESP8266_IP_ADDR[i]='';

    }

    //提取MAC地址

    p=strstr((char*)USART3_RX_BUFFER,'APMAC');

    if(p)

    {

        p+=7;

        for(i=0;*p!=''';i++)

        {

            ESP8266_MAC_ADDR[i]=*p++;

[1] [2]
关键字:STM32  智能称重系统 引用地址:基于STM32+华为云IOT设计智能称重系统

上一篇:基于STM32+华为云IOT设计的智慧路灯
下一篇:了解STM32单片机最小系统

推荐阅读最新更新时间:2026-03-21 03:48

基于STM32设计的智慧路灯(太阳能+华为IOT)
1. 前言 随着工业和城市的快速发展,道路照明系统的产业也在迅速发展,并趋于复杂化,为了更经济地控制和维护复杂的路灯系统,市面上各大科技公司开发了各种路灯控制系统,并且路灯都连上物联网云端,连上了政府网络,可以远程了解路灯的工作情况,运行情况。 为了方便了解物联网平台,学习物联网开发,了解智慧路灯的开发,本文就采用华为云IOT物联网平台,选择STM32作为主控芯片,再配合相关的传感器完成智慧路灯开发。 路灯使用的相关模块与资料可以在这里下载: https://download.csdn.net/download/xiaolong1126626497/85897742 2. 具体实现的功能以及相关的硬件 当前设计的智慧路灯采
[单片机]
基于<font color='red'>STM32</font>设计的智慧路灯(太阳能+<font color='red'>华为</font><font color='red'>云</font><font color='red'>IOT</font>)
基于STM32+华为IOT设计的智慧路灯
随着工业和城市的快速发展,道路照明系统的产业也在迅速发展,并趋于复杂化,为了更经济地控制和维护复杂的路灯系统,市面上各大科技公司开发了各种路灯控制系统,并且路灯都连上物联网云端,连上了政府网络,可以远程了解路灯的工作情况,运行情况。 为了方便了解物联网平台,学习物联网开发,了解智慧路灯的开发,本文就采用华为云IOT物联网平台,选择STM32作为主控芯片,再配合相关的传感器完成智慧路灯开发。 2. 具体实现的功能以及相关的硬件 当前设计的智慧路灯采用NBIOT模块-BC20连接华为云物联网服务器,上传路灯的各种参数信息:环境光强度、太阳能充电板电压、锂电池电量等信息。设计了一款手机APP,可以通过华为云物联网平台的应
[单片机]
基于STM32+<font color='red'>华为</font><font color='red'>云</font><font color='red'>IOT</font>设计的智慧路灯
STM32单片机学习】第12章 GPIO—按键轮询
12.1 关于按键 前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键。 按键监测一般有两种:按键扫描和按键中断。按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。按键中断而是通过按键产生中断信号,从而实现按键的检测,这种方式需要使用到中断机制,需要对MCU了解深入一点,效果是最好的。 本节先介绍按键扫描,理解按键的基本原理,下一章再介绍按键中断,同时了解STM32F103的中断使用方法。 按键一般占用一个GPIO口,通过监测该GPIO的电平变化得知按键操作,典型的电路如图 12.1.1 所示。当所需按键比较多时,则可以采用矩阵按键减
[单片机]
STM32单片机AD4630-24驱动程序
AD4630-24是亚德诺推出的一款24位双通道支持同步采样的ADC,高昂的售价注定了这不会是一款常用芯片,我在做驱动开发期间在中文互联网基本没有找到可以参考的资料或例程。但这次毕竟做的是一款高精度同步电压电流表,这款芯片是领导亲自选的,要求很明确,就是分辨率拉满,咱也只能硬着头皮开干。 这次也是分享以下驱动开发的思路和例程,希望能够帮助到相关人士,顺便,这款芯片要求5V和1.8V双电源供电也是让硬件同事疯狂吐槽。 1.通讯接口 AD4630-24支持串行通讯,为了提高采样结果的读取速率,SDO最高支持8通道同步输出,但很可惜这次使用的单片机是STM32F407,意法连QSPI都不给,只能使用标准的SPI接口通讯,例程也
[单片机]
让人神往的STM32经验大抵如此
单片机用处这么广,尤其是STM32生态这么火!如何快速上手学习呢? 你要考虑的是,要用STM32实现什么? 为什么使用STM32而不是用8051?是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO?是51的功耗太大,电池挺不住?是51的内存太小而你要存储的东西太多?还是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 当你需要使用STM32某些功能,而51实现不了的时候,那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用spi协议的网卡、要使用串口通信、要使用rtos等等。 寄存器vs库函数 我的观点是:当你debug的时候寄存器很重要,当你需要理解芯片工作
[单片机]
stm32 DMA+IDLE modbus_rtu
没有做3.5T延时判断,直接用IDLE中断,所以时间间距会更小。 此程序只使用了两个功能码:03查询数据,06修改从机地址。 需要发送的数据直接放在data 数组里面,协议直接从此数组中取数据然后发送。 00为广播地址,当忘记从机地址时使用此地址发送命令修改从机地址。 modbus_slave.c #include &# 34;stm32f10x.h" #include &# 34;modbus_slave.h" #include &# 34;bsp_usart_dma.h" #include &# 34;bsp_user_lib.h" static void Modbus_Sen
[单片机]
基于stm32标准库独立按键的多按键状态机的实现
写在前面 一般引用都写在最后,但是这篇博文(https://www.cnblogs.com/ZzJan/p/11334869.html)对我这个状态机的影响很大,我这里有许多借鉴他的思维。所以写在前面,以表敬意 简单按键检测 一开始学习单片机的时候我接触到按键的时候就知道按键有抖动,记得当初按键消抖分为硬件和软件,硬件上常用于复位按键如下图 硬件消抖 软件上来说,最经典的消抖 if(KEY1 == 0) { delay_ms(20); // 延时消抖 if(KEY1 == 0) { while(KEY1 == 0);//堵塞,等待松开 // 按键按下处理代码 } }
[单片机]
基于<font color='red'>stm32</font>标准库独立按键的多按键状态机的实现
STM32的项目创建——基于Keil MDK环境
Keil MDK是比较流行的STM32项目开发工具,建议选用5.0以上的版本,同时要注意5.0版本对Windows XP、Window7的支持已经不好了,因此在开发平台上也建议选用Windows 10或以上版本。 另外,Mac系统和Linux系统也可以使用Keil MDK,操作方式类似,这里不做赘述。 创建MDK工程 首先,介绍新建工程的方法,工程创建基于C8T6,要保证在建立前,已经安装了Keil MDK及对应STM32F1的工具包“Keil.STM32F1xx_DFP”。 1、新建工程目录 创建一个文件夹作为新工程的目录,关于此步骤提出两点建议: 一是最好采用“工作空间- 工程目录”的方式
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved