物联网IOT-基于STM32开发板的智能养殖系统+华为云平台+APP端应用+keil编译工具

2023-10-30

物联网IOT-基于STM32开发板的智能养殖系统+华为云平台+APP端应用+keil编译工具

文章摘要

本文主要讲解了物联网IOT技术全栈开发,基于STM32F103RCT6开发板,使用keil编译工具(标准库模式),采用华为云平台设计的一个智能养殖系统以及相关APP的开发的详细步骤。并且可以根据该系统模型进行场景改造,可以在本模型的架构下轻松改造中智慧农业、智慧交通、智慧家居等等相关模型系统。

整体展示

视频展示

可以点击下发链接转置B站观看演示视频:
物联网IOT-基于STM32开发板的智能养殖系统+华为云平台+APP端应用+keil编译工具

1.流程图

在这里插入图片描述

1.硬件设备和APP端、华为云平台

在这里插入图片描述

一、项目场景及功能说明

1.项目场景

本次设计的基于室内智能养殖系统主要通过wifi联网方式,使华为云平台收集传感器上报的数据(包括温湿度、食物重量、水分余量、空气质量等),我们不仅可以通过手机app端及时观看养殖场环境数据,也可以通过养殖场内设计的OLED屏查看数据,而查看数据的权限则要RFID技术实现。;同时通过华为云平台或手机app下发指令控制水泵、电机等硬件设备完成补给粮食、补充水、清洁等功能并及时对命令进行响应,使我们可以根据监测到的数据及时下发命令完成各种操作;同时为方便日常操作,还在华为云平台上设计了一个设备联动规则,用于实现自动模式和手动模式的切换,通过设定一定的阈值来下发操作命令实现自动补给粮食、水等操作。

2.功能说明

1.通过传感器设备实时检测养殖场的温湿度、气体浓度、以及食物和水分余量等;
2.通过电机、水泵等设备实现补给和清洁功能;
3.通过WIFI模块进行组网,并在华为云平台创建产品,实时上报传感器收集的数据,同时下发命令对水泵、电机进行操作并响应;
4.通过华为云平台的设备联动规则实现对补充粮食、补水以及清洁的自动模式和手动模式;
5.通过RFID技术实现对室内OLED屏显示的环境信息查看的权限管理;
6.通过app端可查看相关传感器数据,并下发命令,切换工作模式,数据查询。

二、华为云平台搭建

1.产品信息

在这里插入图片描述

2.确定平台的服务和属性以及命令参数

在这里插入图片描述
在这里插入图片描述

3.在华为云平台创建产品

可以转置以下文章:

还未发布,如需技术支持,可后台联系我或直接评论,看到都会回复,续将更新更详细的文章进行讲解。

三、硬件选择

1、STM32F103RCT6

在这里插入图片描述

2、传感器选择和部分硬件

  • esp8266-01s wifi模块
  • DHT11 温湿度传感器
  • MQ- 135 氨气传感器
  • JW01 三合一空气传感器
  • HW- 181 声音传感器
  • HC-SR04 超声波传感器
  • HX711 模块+5kg 压力传感器
  • OLED 屏
  • MFRC-522 RC522 RFID 射频 IC 卡感应模块
  • 水泵和电机

相关传感器模块如需技术支持,也可后台咨询我,或直接评论,看到都会回复,后续将更新更详细的文章进行讲解各个模块。

四、用ESP8266 wifi模块联网华为云平台

ESP8266模块
ESP8266模块

1、AT固件库

首先我们手上的有些模块可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,因此需要首先对esp8266进行MQTT固件烧录,自行从官网上下载烧录软件和指定的固件库
在这里插入图片描述

2、esp8266模块AT指令的测试

AT
AT+CWMODE=1
AT+CWJAP=“huawei”,“123123123”

用USB转TTL模块连接ESP8266至电脑,与电脑通过串口进行AT通信,发送以上三步,观察手机热点是否能够连上esp8266设备,并观察串口是否返回“ok”指令。、
(注意将AT+CWJAP=“huawei”,"123123123"中的"huawei"改为自己的热点名字,"123123123"改为自己的热点密码,同时切记将热点频段由5改为2.4)

运行成功会如下显示:
在这里插入图片描述

3、获得华为云平台的设备三元组和接入地址、端口号

1.在华为云平台创建设备后获取设备的ID和密码
在这里插入图片描述

2.在(产品文档-开发指南-设备测开发)中寻找该界面后输入设备的ID和密码即可获得设备三元组
在这里插入图片描述
在这里插入图片描述

3.获得独属自己的华为云接入地址
(注意本系统采用的是MQTT协议)

  1. 端口号大家都一致:1883
  2. 获取接入地址
    点击 总览–接入信息–复制接入地址(可以将接入地址用电脑ping一下得到常见的127.什么的类型,该步骤可做也可不做)在这里插入图片描述

至此,我们接入华为云所需要的信息已经全部准备完毕,可将其编写在我们keil中的esp8266.h文件中。如下所示:
在这里插入图片描述

4.esp8266模块联网华为云平台(PC机测试端和32开发板硬件端以及接线方式)

  • PC机测试端(最好先进行PC机端测试在进行开发板连接)

1.首先可在电脑主机进行串口通信测试)(用USB转TTL模块连接esp8266与电脑进行AT通信)
成功连上云平台会有如下显示:
在这里插入图片描述
发送AT指令如下

AT

AT+CWMODE=1

AT+CWJAP=“wifi名称”,“wifi密码”

AT+MQTTUSERCFG=0,1,“NULL”,“设备三元组USERNAME”,“设备三元组PASSWORD”,0,0,“”

AT+MQTTCLIENTID=0,“设备三元组的ClientID”

AT+MQTTCONN=0,“产品接入地址”,1883,1

至此我们的esp8266模块就成功连上华为云平台了。

  • 32开发板硬件端

1、接线方式
采用3.3v
RX接PA9
TX接PA10
(esp8266模块共有六个引脚,在连接到开发板的时候只需使用电源,地线,RX,TX四个引脚)

2、keil端程序编写
首先在esp8266.c程序中编写发送AT指令的at函数

void at(char string[500])//等待正确回复
{
		flag=0;
    printf("%s\r\n",string);
		while(1)
		{
			if(flag==1)	//当串口中断判断接收到的回复为正确回复时会将flag置1
			{
				flag=0;
				break;
			}
			else 
				delay_ms(50);
		}	
}

其次在esp8266.c程序中编写需要发送的相关AT指令进行发送,最后在主函数main.c中进行初始化在编译运行即可联网华为云平台,打开华为云平台可以发现设备处于在线状态

at("AT");					//AT测试
delay_ms(2000);					//等待设备重启
at("AT");					//AT测试
at("AT+CWMODE=1");//设置模块为STA模式
sprintf(str_temp,"AT+CWJAP=\"%s\",\"%s\"",WIFI_SSID,WIFI_PWD);	//连接WiFi
at(str_temp);
sprintf(str_temp,"AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"",USERNAME,PASSWORD);//设置MQTT的登陆用户名与密码
at(str_temp);
sprintf(str_temp,"AT+MQTTCLIENTID=0,\"%s\"",ClientID);//设置MQTT的ClientID
at(str_temp);
sprintf(str_temp,"AT+MQTTCONN=0,\"%s\",%s,1",ADDRESS,PORT);//设置MQTT接入地址与端口号
at(str_temp);
sprintf(str_temp,"AT+MQTTSUB=0,\"$oc/devices/%s/sys/properties/report\",1",DeviceID);	//订阅设备属性上报的主题
at(str_temp);
sprintf(str_temp,"AT+MQTTSUB=0,\"$oc/devices/%s/sys/commands/#\",1",DeviceID);//订阅设备命令接收的主题
at(str_temp);
sprintf(str_temp,"AT+MQTTSUB=0,\"$oc/devices/%s/sys/commands/response/#\",1",DeviceID);//订阅设备命令响应的主题
at(str_temp);
        

至此,我们以及完成了esp8266模块联网华为云平台了!!! 坚持就是胜利!

四、华为云平台的数据上报

1.首先是向华为云平台进行订阅(包括数据上报、命令下发,命令响应)

订阅的过程也是向华为云平台发送AT指令,进行订阅,这里在上一步已经完成了订阅了!!

(无需进行重复操作,只做简单说明)

sprintf(str_temp,"AT+MQTTSUB=0,\"$oc/devices/%s/sys/properties/report\",1",DeviceID);	//订阅设备属性上报的主题
at(str_temp);
sprintf(str_temp,"AT+MQTTSUB=0,\"$oc/devices/%s/sys/commands/#\",1",DeviceID);//订阅设备命令接收的主题
at(str_temp);
sprintf(str_temp,"AT+MQTTSUB=0,\"$oc/devices/%s/sys/commands/response/#\",1",DeviceID);//订阅设备命令响应的主题
at(str_temp);

2.进行数据上报,首先要进行传感器初始化(这里以超声波传感器为例)

首先最好是在初始化的过程中做到最简单的在main.c主函数中只需要初始化和一个输出函数就可以获得传感器的值,便于后续上报数据。
在这里插入图片描述
如上图所示:length就是超声波传感器所返回的值。

如果不会进行如上的初始化,可在后台私信我,也可以进行评论,看到都会及时回复,后续将发布更详细的传感器讲解文章。

3.进行数据上报

1.进行数据上报只需要在main.c程序中编写printf函数通过串口通信发送上报数据的AT指令即可。
如下代码示例(以此可以类比到温湿度等等数据的上报)

printf("AT+MQTTPUB=0,\"$oc/devices/%s/sys/properties/report\",\"{\\\"services\\\":[{\\\"service_id\\\":\\\"%s\\\"\\,\\\"properties\\\":{\\\"Water\\\": %f}}]}\",0,0\r\n",DeviceID,ServiceID1,length);

其中DeviceID是设备ID,ServiceID1是我们华为云创建的服务,根据自己所创自行修改,length是超声波传感器数据。同时还需要将上述的water改为自己的属性名

可以看到华为云平台上成功上报的数据。
在这里插入图片描述

五、华为云平台的命令下发与响应(这里以水泵的操作为例)

1.首先我们可以使用USB转TTL模块连接esp8266模块至电脑端进行串口通信,成功连接华为云并订阅更类消息后,我们在华为云下发命令,观察esp8266模块收到的消息格式。
在这里插入图片描述
可以观察到我们esp8266模块会收到如下数据:
在这里插入图片描述

2.通过步骤1我们已经知道了华为云平台下发数据的格式后,我们可以在串口中断函数中进行提取重要信息并进行判断执行什么操作。

我们需要提取的数据包括(request_id、以及操作符(我这里是1或0,也可以是ON、off,这些都是在创建云平台时自己设置的) 以及其他判断条件。)

串口中断函数(部分)

if(uart1_rec_i>=192)   //
					{
						strncpy(analysis_Str, uart1_recstring, 12);							//提取出“+MQTTSUBRECV”
						if(strcmp(analysis_Str,"+MQTTSUBRECV")==0)
            {
							memset(analysis_Str,0,sizeof(analysis_Str));					//清空缓存区
							
							strncpy(request_id, uart1_recstring+88, 36);     			//提取出request_id
							
							strncpy(analysis_Str, uart1_recstring+131, 5);    		//提取出"paras"
							
							if(strcmp(analysis_Str,"paras")==0)        						//有效参数体
							{
											memset(analysis_Str,0,sizeof(analysis_Str));	//清空缓存区
											strncpy(analysis_Str, uart1_recstring+140,13);	//提取出"Wat_1_control"
								if(strcmp(analysis_Str,"Wat_1_control")==0)
											{
														if(uart1_recstring[156]=='0')
															{
																	
																relay_off();//水泵开启
	 
															}
															else if(uart1_recstring[156]=='1')
															{
																relay_on();//水泵关闭
		
															} 
														
															printf("AT+MQTTPUB=0,\"$oc/devices/%s/sys/commands/response/request_id=%s\",\"\",0,0\r\n",DeviceID,request_id);//命令响应
															
																																
										}        
										

通过中断函数提取操作符1或0判断执行什么操作;同时在上述步骤中也利用提取到的request_id完成了命令响应。可以观察到华为云平台的消息跟踪如下所示:
在这里插入图片描述

至此我们已经完成了硬件端到华为云平台的组网,数据上报,命令下发,命令响应。以上是以超声波传感器的数据上报华为云和华为云下发命令对水泵的控制与响应为例,以此为例可以进行多种传感器的数据上报和对多个设备的控制与响应。包括电机、风扇等等。

对上述硬件端到云平台的操作如有不懂,可以后台私信或直接评论,看到后都会进行回复,需要整个工程的也可以直接联系我。关注我后台发联系方式。

五、华为云平台设置联动规则,实现自动模式和手动模式

1.在云平台上创建规则联动:
在这里插入图片描述

2.创建好的联动规则如下图所示:
在这里插入图片描述

3.联动规则触发命令:
在这里插入图片描述
在这里插入图片描述

六、APP端功能展示

① 登录(身份认证)界面
在这里插入图片描述
② 查看数据和下发命令界面
在这里插入图片描述
③ 数据可视化分析界面
可以点击数据类型的下拉框选择温度、湿度、二氧化碳浓度、氨气浓度、饲料剩余量、饮用水剩余量等6中数据类型进行可视化分析。
在这里插入图片描述

七、总结与资源获取

至此,完成了整个智能养殖系统的全栈开发,使用keil编译工具进行开发板程序编写,在到华为云平台的搭建,以及APP的开发。可以再此的基础上进行场景切换,适用于各个场景包括智慧交通,智慧家居等等。

同时,如果需要整个工程的资源,可以后台联系我,获取相关联系方式。

最后,我也将继续更新更多物联网 IoT相关文章,共同学习与进步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

物联网IOT-基于STM32开发板的智能养殖系统+华为云平台+APP端应用+keil编译工具 的相关文章

  • idea 没有java文件夹_IntelliJ IDEA右键文件夹没有Java Class文件的原因及解决方法

    问题 在项目里创建文件夹后 发现竟然不能新建class文件 问题详细如下图 原因分析 这里涉及到Sources的作用 Sources 一般用于标注类似 src 这种可编译目录 有时候我们项目当中 可能不单单是 src 目录为可编译的 很可能
  • 讨论scrapy-splash渲染不成功问题?

    url https wenshu court gov cn website wenshu 181107ANFZ0BXSK4 index html docId 75461a02d9714cec9322ab4500147439 由于scrapy
  • java基础类型知识

    原生类 基本数据类型 和强类型 引用类型 1 除了八个基本数据类型都是引用类型 但是八个基本数据类型可转换为包装类 基本数据类型没有方法 强类型有方法 装箱 基本数据类型转换为包装类 拆箱 包装类转换为基本数据类型 byte Byte sh

随机推荐

  • element-ui菜单栏切换页面高亮刷新后不显示问题

    最近做的一个vue的小项目 在点击菜单栏其他页面之后高亮会跟着过去 但是刷新后高亮又会重新跳到最初进入的页面 原因是这样的 element ui官网示例 default active activeIndex 这个控制高亮 然后在data中一
  • qt 比较两个字符串是否相等

    QString str QString fromLocal8Bit 球形 if str compare QString fromLocal8Bit 球形 0 或者 if str QString fromLocal8Bit 球形
  • GMAC接口(4)——编程指南

    Note 基于DWC ether qos控制器 RTL8211F PHY 1 硬件复位PHY 可选 通过GPIO接口 将复位信号 持续至少10ms的低电平脉冲 发送到PHY 2 初始化控制器 a 软复位 软件复位 gmac DMA Mode
  • Emacs 之查看帮助

    Emacs 之查看帮助 Table of Contents 1 Emacs 入门 1 1 查看简单的帮助 1 2 执行elisp代码 1 Emacs 入门 1 1 查看简单的帮助 C h f 查看函数的文档 describe functio
  • [人工智能-深度学习-81]:视觉 - 视频换脸软件大全

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122504846 目录 第1名 ZAO
  • 腾讯云轻量2核4G5M服务器_CPU内存_流量_带宽_系统盘

    腾讯云轻量2核4G5M服务器 CPU内存流量带宽系统盘性能测评 轻量应用服务器2核4G5M带宽 免费500GB月流量 60GB系统盘SSD盘 5M带宽下载速度可达640KB 秒 流量超额按照0 8元每GB支付流量费 轻量2核4G5M服务器一
  • 华为ensp配置实验大全(免费&持续更新)

    点开一篇文章 分享 要收费 点开一篇文章 大全 但就两个实验 点开一篇文章 详细 但全截图 我忽略了最重要的东西 产品说明书 产品说明书优势 规范 详细 此文寻找官方手册中的配置实验 博客好文 基础实验为主 你知道的答案 不是下一次作业的答
  • OV7670循迹算法整理

    资源在这 http download csdn net download hello world12138 9910603 2016 7 3 1 今天发现一个比较尴尬的问题 之前摄像头采集到的图像和现实中我显示的图像的旋转方向根本就是反的
  • vivado路径最大时钟约束_【Vivado使用误区与进阶】XDC约束技巧之时钟篇

    Xilinx 的新一代设计套件Vivado中引入了全新的约束文件XDC 在很多规则和技巧上都跟上一代产品ISE中支持的UCF大不相同 给使用者带来许多额外挑战 Xilinx工具专家告诉你 其实用好XDC很容易 只需掌握几点核心技巧 并且时刻
  • Springboot 配置动态多数据源(Mybatis-plus)

    前言 在项目中需要用到动态切换多数据源 查阅Mybatis plus文档得知可以通过 DS注解 但该方法主要针对不同内容的数据源 而目前场景是相同内容的数据库需要在运行时根据请求头动态切换 因此文档方法不适用 注意 不要使用dynamic
  • C语言,使用指针封装函数,实现字符串拷贝,void MyStrcpy(char *p,char *q)

    使用指针实现字符串拷贝 include
  • Docker进阶学习:Raft一致性协议

    双主双从 假设一个结点挂了 其他结点是否可以用 我们接着上面的集群可以做实验 就是我挂掉一个主机的docker服务 看这个swarm可不可以 启动docker服务 sudo systemctl start docker 停止docker服务
  • 在处理el-select数据回显时遇到的问题

    在开发vue项目的时候 会普遍的用到elementUI组件库 当用道其中的下拉框组件时 会遇到一点儿问题 先看如下代码
  • IC设计常用文件及格式介绍

    GDSII 它是用来描述掩模几何图形的事实标准 是二进制格式 内容包括层和几何图形的基本组成 CIF caltech intermediate format 叫caltech中介格式 是另一种基本文本的掩模描述语言 LEF library
  • python 图像识别男女_keras实现简单性别识别(二分类问题)

    importosimportrandomimportcv2importnumpy as npfrom tensorflow contrib keras api keras preprocessing image importImageDat
  • 什么是密码应用安全性评估?多久做一次密码应用安全性评估?

    随着信息技术的飞速发展 网络安全形势愈发严峻 各种安全威胁来势汹汹 勒索攻击 数据泄露等各种安全事件层出不穷 我国面临的网络安全问题同样严峻 而商用密码是保障网络空间安全的根本性核心技术和基础支撑 因此 更加标准和规范的管理和使用密码技术就
  • 146. LRU Cache

    1 The key to solve this problem is using a double linked list which enables us to quickly move nodes 2 The LRU cache is
  • 使用stelnet进行安全的远程管理

    1 telnet有哪些不足 2 ssh如何保证数据传输安全 需求 远程telnet管理设备 用户定义需要在AAA模式下 开启远程登录的服务 定义vty接口 然后从R2登录 是可以登录的 同理R3登录 在R1也可以查看哪些用户telnet登录
  • llvm是什么?

    llvm是什么 llvm是low level virtual machine的简称 其实是一个编译器框架 llvm随着这个项目的不断的发展 已经无法完全的代表这个项目了 只是这种叫法一直延续下来 llvm是一个开源的项目 它最早的时候是Il
  • 物联网IOT-基于STM32开发板的智能养殖系统+华为云平台+APP端应用+keil编译工具

    物联网IOT 基于STM32开发板的智能养殖系统 华为云平台 APP端应用 keil编译工具 文章摘要 整体展示 视频展示 1 流程图 1 硬件设备和APP端 华为云平台 一 项目场景及功能说明 1 项目场景 2 功能说明 二 华为云平台搭