热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于STM32设计智能家居控制系统(OneNet)_2022

基于STM32设计智能家居控制系统(OneNet)_2022-1.前言随着科学技术的发展,人们的生活方式发生着巨大改变,基于物联网技术实现的智能家居使我们的生活变得更加方便快



1. 前言

随着科学技术的发展,人们的生活方式发生着巨大改变,基于物联网技术实现的智能家居使我们的生活变得更加方便快捷。本次设计结合现代生活的具体需求,设计出一套基于物联网技术的智能家居电子系统设计,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。


2. 具体需求

主要实现对光照强度、温湿度等信息的实时监测,将相关信息、设备状态信息等实时显示,通过ESP8266wifi模块进行联网可实现远程数据传输,利用OneNET云平台,MQTT传输协议,编辑应用实现手机端和电脑端的远程控制显示,操作界面美观方便,便于使用。

硬件选项要求:

(1)ESP8266 串口WIFI,用来与OneNet进行远程通信。

(2)DHT11 温度传感器,检测本地环境的温度湿度信息。

(3)继电器,来模拟控制家里的电器。

(4)BH1750 光敏传感器,检测环境光强度

(5)MQ135 空气质量传感器。可以检测可燃气体、烟雾浓度,实现火警预警。

(6)OLED显示屏显示本地的传感器的参数情况,实时展示


3. 硬件选型


3.1 继电器


3.2 ESP8266 WIFI

(1)模块采用串口(LVTTL)与MCU(或其他串口设备)通信,内置TCP/IP协议栈,能够实现串口与WIFI之间的转换
(2)模块支持LVTTL串口,兼容3.3V和5V单片机系统
(3)模块支持串口转WIFI STA、串口转AP和WIFI STA+WIFIAP的模式,从而快速构建串口-WIFI数据传输方案


3.3 MQ-135空气质量传感器

MQ135传感器对氨气、硫化物、苯系蒸汽的灵敏度高,对烟雾和其它有害的监测也很理想。这种传感器可检测多种有害气体,是一款适合多种应用的低成本传感器。


3.4 DHT11温湿度传感器

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有可靠性与卓越的长期稳定性,成本低、相对湿度和温度测量、快响应、抗干扰能力强、信号传输距离长、数字信号输出、精确校准。传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。可用于暖通空调、除湿器、测试及检测设备、消费品、汽车、自动控制、数据记录器、气象站、家电、湿度调节器、医疗、其他相关湿度检测控制。

特点如下:

1、可以检测周围环境的湿度

2、可以检测周围环境的温度

3、湿度测量范围:20%-95%(0度-50度范围)湿度测量误差:±5%4、温度测量范围:o度-50度温度测量误差:±2度

4、工作电压3.3V-5V

5、输出形式数字输出


3.5 STM32系统板

主控CPU采用STM32F103RCT6,这颗芯片包括48 KB SRAM、256 KB Flash、2个基本定时器、4个通用定时器、2个高级定时器、51个通用IO口、5个串口、2个DMA控制器、3个SPI、2个I2C、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口,芯片属于大容量类型,配置较高,整体符合硬件选型设计。当前选择的这款开发板自带了一个1.4寸的TFT-LCD彩屏,可以显示当前传感器数据以及一些运行状态信息。


3.6 OLED显示屏

特点:

OLED是有机发光二极管又称为有机激光显示、OLED显示技术具有自发光的特性、采用非常薄的有机材料涂层、和玻璃基板、当有电流通过时、这些有机材料就会发光、而且OLED显示屏幕可视角大、功耗低、OLED由于同时具备自发光、不需背光源(只是供电不会亮的、驱动程序和接线正确才会点亮)对比度高、厚度薄视角广、反应速度快、可用于挠曲面板、使用温度范围广、结构及制程等优异之特性、先接触的1286屏都是LCD的、需要背光、功耗较高、而OLED的功耗低、更加适合小系统、由于两者发光材料的不同、在不同的环境中、OLED的显示效果好、模块供电可以是3.3v也可以是5V、不需要修改模块电路、OLED屏具有多个控制指令、可以控制oLED的亮度、对比度、开关升压电路等指令、操作方便、功能丰富、可显示汉字、ASCH、图案等、同时为了方便应用在产品上、预留4个M3固定孔、方便用户固在机壳上。

3.7 母对母杜邦线


3.8 BH1750光敏传感器


4. OneNet平台创建产品与设备


4.1 创建产品


(1)登录账号注册

官网: https://open.iot.10086.cn/

点击右上角控制台。


(2)选择旧版本控制台


(3)选择MQTT物联网套件


(4)创建产品

填写信息。


4.2 创建设备


(1) 添加设备

添加成功。


(2)添加数据流模板

接下来根据自己传感器需要上传的数据,添加对应的数据点。

添加完成。


4.3 软件模拟设备登录测试


(1)MQTT服务器地址信息

文档: https://open.iot.10086.cn/doc/v5/develop/detail/248

IP地址: 183.230.40.96
端口号: 1883

(2)生成登录密匙信息

查看MQTT登录报文需要填写的参数来源与格式。

文档: https://open.iot.10086.cn/doc/v5/develop/detail/265

算法介绍文档:https://open.iot.10086.cn/doc/v5/develop/detail/241

下载token生成工具。

工具软件里需要填写的参数如下:

【1】res选项参数的格式: products/{产品ID}/devices/{设备名称}

【2】et是设置token过期时间:算出1970-1-1到你想要设置的到期时间,单位是秒,填入即可。

比如: 超时时间设置为2022-4-7,那么,这里填入的秒就是:1970-1-1到2022-4-7之间的秒单位时间。

【3】key的参数格式: 就是设备创建之后,在设备详情页的key

C语言获取秒单位时间的代码:

#include
#include
#include

int main()
{
time_t time_sec;
time_sec=time(NULL); //当前的秒单位时间--UTC时间
printf("当前时间(秒):%ld\n",time_sec);
printf("加一年的时间(秒):%ld\n",time_sec+12*30*24*60*60);
return 0;
}

设备密匙查看:

products/501579/devices/dev1
1680445911
NrbXMe5YHavoxRab+YscPKXcZhWmS04+KE3BHSYqJqA=

生成登录密匙:

生成的数据就是MQTT服务器登录的密匙。


(3)主题订阅与发布的格式

文档地址:https://open.iot.10086.cn/doc/mqtt/book/device-develop/protocol.html

订阅 topic 订阅效果
$sys/{pid}/{device-name}/dp/post/json/accepted 订阅设备数据点上报成功的消息
$sys/{pid}/{device-name}/dp/post/json/rejected 订阅设备数据点上报失败的消息
$sys/{pid}/{device-name}/dp/post/json/+ 订阅设备数据点上报结果
$sys/{pid}/{device-name}/cmd/request/+ 订阅设备所有命令消息
$sys/{pid}/{device-name}/cmd/response/+/+ 订阅设备所有命令应答结果消息
$sys/{pid}/{device-name}/cmd/# 订阅设备所有命令相关消息
$sys/{pid}/{device-name}/# 订阅设备所有相关消息

上传数据点的格式介绍:https://open.iot.10086.cn/doc/mqtt/book/example/datapoints.html

topic 命名规则如下:
$sys/{pid}/{device-name}/dp/post/json
本例中,发布 topic 名称为:
$sys/238322/mqtts-test-device/dp/post/json
payload示例如下:
{
"id": 123,
"dp": {
"temperatrue": [{
"v": 30,
}],
"power": [{
"v": 4.5,
}]
}
}

当前设备的主题订阅与主题发布总结:


(4)软件模拟登录测试

当前采用MQTT客户端模拟设备,登录Onetnet测试,完成数据交互,测试云端产品设备交互是否OK。

软件下载地址:https://download.csdn.net/download/xiaolong1126626497/18784012

根据软件提示,填充好参数,点击连接服务器,接着订阅主题,发送主题。

然后网页登录OneNet查看设备状态,与数据显示。

查看上传的数据。


(5)云端下发命令给设备

onenet支持以同步的形式发送命令给设备,方便控制设备。

发送命令的方法和设备应答的说明文档:https://open.iot.10086.cn/doc/v5/develop/detail/267

总结:

云端下发的命令格式:
$sys/501579/dev1/cmd/request/3baf8324-e5d4-43f1-be89-118299c3b583
LED_ON
其中:
3baf8324-e5d4-43f1-be89-118299c3b583 表示当前的请求ID,设备应答的时候需要带上这个ID返回去。
LED_ON 表示云端下发的命令内容
设备收到这个命令之后,需要向云端回应。
回应的格式如下:
发布主题: $sys/501579/dev1/cmd/response/3baf8324-e5d4-43f1-be89-118299c3b583
发布的消息:111
其中:111 是返回给云端的消息内容,111是随便写的,举个例子。

下面来实操演示一下过程:

登录OneNet官网,点开设备列表页面,先让设备登录服务器,点击更多操作,点击下发命令。

编辑好参数,点击发送。

这时MQTT设备端就会收到提示。

然后拼接好命令再发送应答给服务器。

网页上收到正确的响应。


4.4 创建web网页应用


(1)访问新版编辑器

地址:https://open.iot.10086.cn/develop/mqtts/product/#/app/independent?pid=501579


(2)新建项目

根据自己需求设计界面。

接下来需要绑定数据来源,可以显示设备上传的数据。

选中控件,再选择数据源。

点击管理数据源,添加新的数据源。

新增数据源。

注意:上面提示栏里的key从产品页面获取。

创建完之后,在将控件的数据源绑定起来。

然后接下来就继续创建每个仪表盘需要显示的数据源。

注意:为了让数据可以实时显示,这里获取数据点数要填1。

添加的数据源如下:

依次绑定每个仪表盘的数据源。

绑定两个开关的数据源。

每个开关可以向设备端发送命令,修改命令下发的格式。

这里的{V} 表示是一个变量,如果我设置成LED:{V} 那么就表示下发的命令就是LED:0或者是LED:1

表盘可以设置最大数值的范围。


(3)测试数据显示

整体界面已经设计完成,点击右上角的预览。


(4)发布页面

在数据可视化页面发布项目。

然后得到的链接,可以分享给其他人,直接浏览器打开就可以查看传感器数据了。

https://open.iot.10086.cn/view/main/index.html#/share2d?id=624f0a67bb4cd1003509e43b


5. STM32设备端代码

整个项目代码的下载地址: https://download.csdn.net/download/xiaolong1126626497/85588806

串口上会输出当前程序运行的状态信息,可以打开串口调试助手查看。


5.1 LCD汉字取模

LCD上需要显示汉字,使用点阵字模取模软件进行取模。


5.2 硬件连线

1. ESP8266 WIFI接线
ATK-ESP8266串口WIFI模块与STM32的串口2相连接。
PA2(TX)--RXD 模块接收脚
PA3(RX)--TXD 模块发送脚
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)
2. TFT 1.44 寸彩屏接线
GND 电源地
VCC 接5V或3.3v电源
SCL 接PC8(SCL)
SDA 接PC9(SDA)
RST 接PC10
DC 接PB7
CS 接PB8
BL 接PB11
3. DHT11 温湿度
VCC--VCC
GND---GND
DAT---PA5
4. LED灯-模拟房间的照明灯
VCC--->5V
DAT--->PB12
GND--->GND
5. 智能窗帘-模拟家里的窗帘
VCC--->5V
DAT--->PB13
GND--->GND
6. MQ135空气质量检测传感器
VCC--->5V
GND--->GND
DAT--->PA1
7. BH1750环境光检测模块:
SDA-----PB5
SCL-----PB6
GND---GND 地
VCC---VCC 电源(3.3V~5.0V)
8. 板载LED灯接线
LED1---PA8
LED2---PD2
9. 板载按键接线
K0---PA0
K1---PC5
K2---PA15

5.2 keil工程布局


5.3 main.c代码

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include
#include "timer.h"
#include "esp8266.h"
#include "motor.h"
#include "oled.h"
#include "dht11.h"
#include "adc.h"
#include
#include
#include "font.h"
#include "mqtt.h"
#include "iic.h"
#include "bh1750.h"
/*
(1)ESP8266 串口WIFI,用来与OneNet进行远程通信。
(2)DHT11 温度传感器,检测本地环境的温度湿度信息。
(3)继电器,来模拟控制家里的电器。
(4)BH1750 光敏传感器,检测环境光强度
(5)MQ135 空气质量传感器。可以检测可燃气体、烟雾浓度,实现火警预警。
(6)OLED显示屏显示本地的传感器的参数情况,实时展示
*/
//物联网服务器的设备信息
#define MQTT_ClientID "dev1"
#define MQTT_UserName "501579"
#define MQTT_PassWord "version=2018-10-31&res=products%2F501579%2Fdevices%2Fdev1&et=1680445911&method=md5&sign=c9RN5dgyyaCqh1EbkKjqKA%3D%3D"
//订阅与发布的主题
#define SET_TOPIC "$sys/501579/dev1/#" //订阅
#define POST_TOPIC "$sys/501579/dev1/dp/post/json" //发布
//设置连接的路由器信息
#define CONNECT_WIFI "Xiaomi_meizi6" //将要连接的路由器名称 --不要出现中文、空格等特殊字符
#define CONNECT_PASS "12170307yu" //将要连接的路由器密码
#define CONNECT_SERVER_IP "183.230.40.96" //服务器IP地址
#define CONNECT_SERVER_PORT 1883 //服务器端口号
//JTAG模式设置,用于设置JTAG的模式
//mode:jtag,swd模式设置;00,全使能;01,使能SWD;10,全关闭;
#define JTAG_SWD_DISABLE 0X02
#define SWD_ENABLE 0X01
#define JTAG_SWD_ENABLE 0X00
void JTAG_Set(u8 mode)
{
u32 temp;
temp=mode;
temp




推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
author-avatar
心理学点滴_312
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有