一、系统概述
该系统主要由 APP 端和掌控板两部分组成,并通过连接多个硬件设备实现功能。系统利用云计算和物联网技术,能够实现用户与餐饮设备之间的高效交互。
系统功能
- 地区选择与菜品推荐
- 用户可以通过 APP 选择所在地区,系统会根据所选地区在掌控板上显示当地的菜品信息。
- 当用户发出选择地区的指令时,APP 会将信息发送给 su - 03t 设备,su - 03t 设备再将信息传递给掌控板进行显示。
- 餐饮定制
- 用户能够在 APP 上选择早中晚餐,并将选择发送到 su - 03t 设备,进而在掌控板上显示出来。
- 开启时,su - 03t 设备会播放语音,提示用户选择地区和本作品功能。
- 温湿度监测
- 系统连接 su - 30t 温湿度传感器,每 500 毫秒在掌控板上刷新温湿度数据,确保环境数据的实时更新。
- 网络连接与数据传输
- APP 通过连接巴法云实现数据传输,掌控板通过 Wi - Fi 与巴法云联网,确保系统的稳定性和数据的安全性。
用户体验
- 便捷操作
- 用户只需要通过 APP 进行简单操作,即可实现对餐饮选择和环境监测的控制,无需复杂的设置。
- 个性化服务
- 根据用户选择的地区,系统能够个性化地推荐当地菜品,满足用户的口味需求。
- 实时数据
- 温湿度传感器每 500 毫秒刷新一次数据,用户可以随时了解环境状况,为餐饮体验提供更好的环境保障。
二、硬件作用
三、逻辑流程图
四、代码分析
Mind+ 全图
主程序
- ESP32 主程序连接物联网
- 这表示整个程序是基于 ESP32 芯片的,由于连接easyIot,需要联网。详情下文(物联网平台-巴法云)
- 设置串口 1
- 这里配置了串口 1 的参数。Rx(接收引脚)为 P13,Tx(发送引脚)为 P14,波特率为 9600。
- 波特率 9600 意味着每秒传输 9600 位数据,这是串口通信中常见的速率,用于确保数据在设备间正确传输。
- 屏幕显示文字
- 在屏幕的第 1 行显示文字 “华南地区”。
- 这可能是用于初始化显示,表明当前地区为 “华南地区”,可能后续会根据这个地区进行相关操作,比如菜品推荐等。
- 循环执行
- 这是一个循环结构,程序会不断地重复执行循环内的操作。
- 如果串口 1 有数据可读,那么执行
- 这是一个条件判断语句。如果串口 1 接收到数据,就会执行下面的操作。
- 这通常用于处理从外部设备接收到的数据。
- 设置读取数据的值为读取串口 1 数据
- 当串口 1 有数据可读时,将读取到的数据存储到一个名为 “读取数据” 的变量中。
- 串口 1 字符串输出变量读取数据换行
- 将存储在 “读取数据” 变量中的数据通过串口 1 输出,并换行。
- 这一步可能用于将接收到的数据反馈给其他设备,或者用于调试目的。
- 设置打印控制的值为 1
- 设置一个名为 “打印控制” 的变量值为 1
物联网平台-巴法云
Mind+中设置
巴法云中设置Mqtt主题
appinventor中连接easyIot
CI-03t
appinventor
五、重点记录
串口之间交互
硬件交互的难点在与串口数据交互,主流的esp32有三个串口,有两个可以有用来与其他的硬件数据交互,另个一个使用打印调试程序的(图中“串口0”)。
void loop() {
if ((Serial1.available())) {
mind_n_DuQuShuJu = Serial1.read();
Serial1.println(mind_n_DuQuShuJu);
mind_n_DaYinKongZhi = 1;
mind_n_KongZhiDaYin2 = 1;
}
DF_DiQu();
DF_CaiPinTuiJian();
DF_WenShiDu();
}
本作品的难点之一在于,怎么处理esp32与CI-03T之间的串口数据传输。
第一,我们要了解串口通信的原理以及协议
-
波特率:这是串口通信中的一个关键参数,它定义了传输速率,即每秒钟可以传输多少位数据。
-
数据位:这是指在串口通信中每个数据包含的位数,通常是8位。
-
校验位:这是用于错误检测的额外位,可以是奇校验、偶校验或无校验。
-
停止位:这是每个数据包的结束标志,可以是1位或2位。
-
底层都是二进制,一般用十六进制显示
第二,了解不同硬件自己接受数据的规范与协议
本作品中CI-03t中发送是十六进制的数,接收的是十进制的数。
我们在实际的调试过程中,发现数据乱码,达不到我们预计结果,原因是对硬件串口通信协议的不理解。
在mind+中,int代表发送的数据,03t默认的格式必须要用)0xaa 0x55 "要发出的数据" 0x55 0xaa,才能接受到。
当03t接受到0x01时,就会播放该菜品名。
消息号为11时,int变量为数字类型,值为11,那就没有问题
如果是,int变量为字符串类型,就有问题,“11”将转换为两个数据,底层数据是 0x01 0x01,就不是一个数值。
原理讲解
Serial1.read();读的是个一个字节,八比特,类型为一个数字类型
数字类型 的好处是在做逻辑判断是会识别是十进制,十六进制等,进行对比。
没有0x开头,进行十进制对比
有0x开头的,进行十六进行对比。
综上所诉,建议最好用read()去读,用int类型接受,然后根据不同硬件串口协议去输入不同的数据进制,比如。
CI-03t中
发送是十六进制的数,
接收的是十进制的数。格式:0xaa 0x55 "要发出的数据" 0x55 0xaa
物联网通信
什么是物联网
简单说,“物”就是硬件,实体。联网是连接万维网。综合就是,硬件与硬件之间通过网络实现数据交往。
什么是MQTT协议
MQTT(Message Queuing Telemetry Transport)协议是一种基于发布 / 订阅(publish/subscribe)模式的轻量级物联网消息传输协议
工作原理
-
发布(Publish):设备(也称为客户端)可以将消息发布到一个或多个主题(Topic)上。主题就像是一个消息分类的标签,例如 “传感器 / 温度”“设备 / 状态” 等。例如,一个温度传感器可以将当前环境温度的数据发布到 “传感器 / 温度” 这个主题下。
-
订阅(Subscribe):客户端可以订阅一个或多个感兴趣的主题。当有其他客户端发布消息到该主题时,订阅该主题的客户端就会收到消息。比如,一个监控系统订阅了 “传感器 / 温度” 主题,那么只要有温度传感器发布温度消息到这个主题,监控系统就能收到并处理这些消息。
实现步骤
1.根据需求搭建UI控件,并导入MQTT插件
2.注册巴法云,并设置主题
3.app程序连接MQTT,编写相关程序
4.Mind+中编程相关程序
最后,这里只是简单介绍一下,使用时MQTT,APP与esp32 都要联网。
💥嗨,亲爱的朋友们!
😍如此优秀的ESP32文章,真的值得你点赞支持一下哦!你的每一个赞都是对我们最大的鼓励和认可,能让我们更有动力继续为大家带来更多精彩。
📌而且,别忘了收藏哦!把它放进你的收藏夹,就像把宝藏收入囊中,随时都能拿出来回味和使用。说不定在某个不经意的时刻,它就能给你带来意想不到的惊喜和帮助呢!
💕感谢大家的支持与厚爱,让我们一起在探索美好的道路上携手前行!