基于STM32的智能家具检测系统
闲来无事,用手头STM32做个项目。
成品功能:
1、不同基点可以同时检测不同环境的情况;
2、这些节点将数据发送给基站;
3、当基站检测到数据异常时,可以给手机发短信进行提醒;
材料
- STM32F103C8T6最小系统板两个
- OLED显示屏(IIC 四脚)两块
- 温湿度模块(DHT11)
- 气体传感器模块(TVOC/CO2 空气质量甲醛 二氧化碳测量)(SGP30)
- 空气质量传感器(MQ-135)
- 蓝牙模块(HC-05)两个
- 短信GSM无线模块(SIM800C)
- 杜邦线
- 电源(充电宝代替)
- 用keil5进行开发
开始制作。
制作过程
分为基点和基站,基点负责采集不同传感器信息并发送给基站;基站负责处理信息,并发送给手机。 基点:接收不同传感器采集的数据,打包一起,通过蓝牙模块发送给基站蓝牙模块。 基站:通过蓝牙接收数据,处理,判断,当数据不正常的时候,通过GSM发送短信给手机进行提醒。
系统制作
基点采用STM32F103C8T6作为主控;SGP30接3.3V供电,采用IIC进行数据传输;MQ-135接5V供电,有一个模拟输出,一个数字输出,我们这里用模拟输出,采集AD值,蓝牙模块接3.3v供电,串口传输;OLED接3.3v供电,采用IIC进行数据传输。 基站采用STM32F103C8T6作为主控;OLED接3.3v供电,采用IIC进行数据传输。GSM模块接5V供电,串口传输。
OLED模块调试
有机发光二极管又称为有机电激光显示,OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,功耗低。OLED由于同时具备自发光、不需要背光源(只上电是不会亮的,驱动程序和接线正确才会点亮)、对比度高、厚度薄、视角广、反应速度快、可用于挠曲面板、使用温度范围广、结构及制程简单等优异之特性。最先接触的12864屏都是LCD的,需要背光,功耗较高,而OLED的功耗低,更适合小系统;由于两者发光材料的不同,在不同的环境中,ILED的的显示效果更佳。模块供电可以是3.3V也可以是5V,不需要修改模块电路,OLED屏具有多个指令控制,可以控制OLED的亮度、对比度、开关升压电路等指令。操作方便,功能丰富。可显示汉字、ASCll、图案等。同时为了方便应用在产品上,预留4个M3固定孔,方便用户固定在机壳上。 模块通过IIC进行通讯。
硬件连接
IIC并没有端口限制,随便找两个普通IO接上即可。
软件测试
1.调用淘宝给的例程。 2. 根据自己的需要,通过取模软件,得到自己想要显示的汉字或者图片。 3.观察显示是否正确。
取模软件按照这样设置即可 将得到的值放到char Hzk[][32] 这个数组中即可
SGP30模块调试
SGP30模块 SGP30主要是对空气质量进行检测。TVOC是一项重要指标,指总可挥发有机物气体。一般我们可以用它来反映甲醛的浓度。 SGP30是一款单一芯片上具有多个传感元件的金属氧化物气体传感器,内集成4个气体传感元件,具有完全校准的空气质量输出信号。另外,SGP易于集成,能够将金属氧化物气体传感器集成到移动设备中,为智能家居、家电和物联网应用中的环境监测开辟了新的可能性。主要用于甲醛的检测! 模块通过IIC进行通讯。
硬件连接
IIC并没有端口限制,随便找两个引脚接上即可。
软件测试
- 配置好IIC通信。
- 根据协议配置好数据接收。
- 测试数据是否正确。
温湿度模块调试
DHT11模块 分辨率:16Bit 重复性:士1%RH 精 度:25℃士5%RH 互换性:可完全互换 响应时间:1/e(63%)25℃ 6s 1m/s 空气 6s 迟 滞:<士0.3%RH 长期稳定性:<±0.5%RH/yr 供 电:DC33~5.5V 供电电流:测量0.3mA待机60μA 采样周期:次大于2秒 湿度测量范围:20-95%RH 温度测量范围:0-50℃ 温度分辨率:1℃
硬件连接
接一个普通IO作为数据输入(推挽输入)即可。
软件测试
- 根据协议配置好数据接收。
- 测试数据是否正确。
空气质量传感器模块调试
MQ-135模块
硬件连接
接AD输入(模拟输入)。
软件测试
- 配置好ADC检测。
- 测试数据是否正确。
蓝牙模块调试
HC-05模块 1、核心模块使用HC-05从模块,引出接口包括VCC,GND,TXD,RXD,KEY引脚、蓝牙连接状态引出脚(STATE),未连接输出低,连接后输出高; 2、led指示蓝牙连接状态,快闪表示没有蓝牙连接,慢闪表示进入AT模式,双闪表示蓝牙已连接并打开了端口; 3、底板设置防反接二极管,带3.3V LDO,输入电压3.6~6V,未配对时电流约30mA,配对后约10mA,输入电压禁止超过7V! 4、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接,无需MAX232也不能经过MAX232! 5、空旷地有效距离10米(功率等级为CLASS 2),超过10米也是可能的,但不对此距离的连接质量做保证 6、配对以后当全双工串口使用,无需了解任何蓝牙协议,支持8位数据位、1位停止位、可设置奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。 7、可以通过拉高34脚进入AT命令模式设置参数和查询信息; 8、体积小巧(3.57cm*1.52cm),工厂贴片生产,保证贴片质量。并套透明热缩管,防尘美观,且有一定的防静电能力。 9、可通过AT命令切换为主机或者从机模式,可通过AT命令连接指定设备; 10、支持从4800bps~1382400bps间的标准波特率; https://item.taobao.com/item.htm?spm=a230r.1.14.16.cbf753edcP10kQ&id=39244262350&ns=1&abbucket=8#detail
硬件连接
两个蓝牙分别接到串口上。
软件测试
- 我们将两块蓝牙配置成上电自动开启透传模式,波特率为9600,这样就不需要再去控制输出,只是接收两个牙传送的数据。(教程https://blog.csdn.net/weixin_42320020/article/details/88562539)
- 配置好串口发送和接收,在主机那一段,还要具体去分析数据。
- 测试数据是否正确。
GSM模块调试
ATK-SIM800C 此模块供电要求:5V 供电 ,电脑调试初期电脑USB供电可以满足要求。因为我们加了1000UF的大电容。长时间传输数据用电量大推荐1A以上的直流,TTL电平串口自适应兼容3.3V和5V单片机。可以直接连接单片机。待机在80MA左右,可以设置休眠状态在10MA左右低功耗。电脑调试USB–232和USB–TTL均可,根据各人配件而定。支持短信,数据,彩信,上网等。复位排针引出,可实现现场无人值守远程复位,带DTMF功能实现远程遥控功能。模块最大的优点是保留232口,在学习或者开发时可以监听51低端单片机和模块指令执行情况,能更快的找出原因,节省开发和学习的时间。[支持2,3,4G手机卡]。
硬件连接
两个串口线接在板子另一路串口上,还需要接12V独立供电。
AT指令测试模块调试
首先用AT指令测试模块,达到可以发短信,打电话。 下边是部分AT指令:
AT | 返回 | 作用 |
---|
AT | OK | 模块通讯正常 | AT+CPIN? | +CPIN:READY | 查询 SIM 卡的状态,主要是 PIN 码 | AT+CSQ | +CSQ: 24,0 | 查询信号质量 | AT+COPS? | +COPS:0,0,”CHINA MOBILE” | 查询当前运营商 | AT+CGMI | SIMCOM_Ltd | 查询模块制造商 | AT+CGMM | SIMCOM_SIM800C | 查询模块型号 | AT+CGSN | 866104023267696 | 查询产品序列号(集 IMEI 号) | AT+CNUM | +CNUM:””,”136******”,”129”,7,4 | 查询本机号码 | ATE1 | OK | 设置回显模式(默认开启) | ATD10086; | OK | 用于拨打任意电话号码 | ATA | OK | 应答电话 | ATH | OK | 挂断电话 | AT+CMGF=1 | OK | 置短消息模式,设置为文本模式 | AT+CSCS=“GSM” | OK | 用于设置 TE 字符集,纯英文为GSM,中英文为UCS2 | AT+CMGS | > | 用于发短信 |
英文短信的发送
- 设置字符集为
AT+CSCS="GSM" ; - 设置文本模式为
AT+CMGF=1 ; - 发送短信的目的人为
AT+CMGS="18********" ; - 然后模块返回:
> ,此时我们输入我们需要发送的内容:ATK-SIM800C MSG SEND TEST ; - 在发送完内容以后, 最后以十六进制(HEX)格式单独发送(不用添加回车):
1A (即 0X1A),即可启动一次短信发送。 - 稍等片刻,在短信成功发送后,模块返回如: +CMGS: 39,的确认信息,表示短信成功发送
中文短信的发送
- 首先发送
AT+CMGF=1 , 设置为文本模式; - 设置文本模式参数
AT+CSMP=17,167,2,25 ; - 设置字符集为
AT+CSCS="UCS2" ; - 首先要用将号码和发送内容转换为UNICODE 字符串,
1.号码182********,转换后的 UNICODE 字符串(去掉空格后)为: 2.00310038003200390030003100390035003600330032 3.ATK-SIM800C 中英文短信发送测试,装换后的 UNICODE 字符串为: 4.00410054004B002D00530049004D003800300030004300204E2D82F1658777ED4FE153D 190016D4B8BD5
由于使用了 UCS2字符集,所有字符/数字/汉字,都必须使用 UNICODE 编码
- 发送:
AT+CMGS=”00310038003200390030003100390035003600330032” ,这个指 令,然后模块返回:> - 此时我们输入我们需要发送的内容:
00410054004B002D00530049004D003800300030004300204E2D82F1658777ED4FE153D 190016D4B8BD5 注意,此可以不用发送回车了; - 在发送完内容以后,最后以十六进制(HEX)格式当独发送(不用添加回
车): 1A (即 0X1A),启动一次短信发送。 一次中英文短信发送成功。
代码测试
我们要做的就是将上述步骤自动化,这里我们做的是英文短信,因为英文短信简单,也足够满足我们的需求。
- 初始化
- 短信测试
3. 这样既可得到我们需要的内容
GSM模块代码
void sim800c_test(void)
{
OLED_Clear();
sim800c_send_cmd((u8*)0X1A,"+CMGS:",10);
delay_ms(1000);
while(sim800c_send_cmd("AT","OK",100))
{
OLED_ShowString(40,3,"SBLJZ ",16);
sim800c_send_cmd((u8*)0X1A,"+CMGS:",10);
delay_ms(800);
}
OLED_ShowString(40,3,"LJCG ",16);
delay_ms(10);
while(sim800c_send_cmd("AT+CMGF=1","OK",200)){}
OLED_ShowString(40,3,"WBMS ",16);
while(sim800c_send_cmd("AT+CSCS=\"GSM\"","OK",200)){}
OLED_ShowString(40,3,"ZFMS ",16);
OLED_ShowString(40,3,"ZZSZ ",16);
if(sim800c_send_cmd("AT+CMGS=\"13113131313\"",">",800) == 0);
printf(temp_table_Send);
if(sim800c_send_cmd((u8*)0X1A,"+CMGS:",800)==0){OLED_ShowString(40,3," FSCG ",16);return;}
OLED_ShowString(40,3," FSSB ",16);
USART_RX_STA_2=0;
if(USART_RX_STA_2&0X8000)sim_at_response(1);
}
这样就可以了。
最后完善代码逻辑。
通过接收基点发来的数据,经过分析后,当出现超过阈值的数值之后发送一次短信,知道本次恢复正常后再次超过阈值才会发送第二次短信。
这是整个实验的效果视频。 https://www.bilibili.com/video/BV1CR4y1A7Mf?spm_id_from=333.337.search-card.all.click 最后附上完整的项目文件。自行下载。 https://download.csdn.net/download/weixin_42320020/85319611 这个项目到这里就算完了。 还有很多不足的地方,希望大佬可以指正。也希望和爱好者交流学习。
禁止转载!!! 博客:https://blog.csdn.net/weixin_42320020/?type=blog QQ:2039723308 VX:Shiboven
|