一、项目说明 本项目是一套基于 阿里云IoT平台云产品流转 的物联网远程控制解决方案。Android APP 和 Air780EP 4G模组作为 同一产品下的两个不同设备 注册在阿里云平台上,通过云产品流转规则实现双向消息路由,无需额外搭建中转服务器。 Air780EP 端:运行在 RTOS 实时操作系统 上的 LuatOS Lua 固件,负责GPIO控制、LBS基站定位、数据采集与上报 Android APP 端:Java 开发的控制终端,负责设备状态显示、远程控制指令下发、历史数据查询 通信链路:APP ←→ 阿里云IoT(云产品流转)←→ Air780EP,全程经过阿里云平台鉴权和路由 应用场景 远程设备开关控制(如灯光、电机、继电器等) 4G设备位置追踪(LBS基站定位) 设备租赁/计费管理(到期自动停机) 无人值守设备远程运维 核心特性 双路GPIO远程控制(开关A / 开关B) LBS基站定位,每60秒上报经纬度,APP端可跳转高德地图查看位置 设备到期管理:设定截止时间后到期自动关闭设备,续期后自动恢复 断网保护:断网超过300秒自动停止设备,恢复网络后自动续期 多用户体系:管理员 + 普通用户,管理员可管理所有设备和用户 历史数据查询:SQLite本地存储所有设备参数变化记录,支持时间范围筛选 设备离线计时:断网期间软件模拟时间递进,保证到期判断准确性 二、阿里云架构 2.1 设备关系 在阿里云IoT平台上,Android APP 和 Air780EP 属于 同一个产品下的两个不同设备 2.2 云产品流转机制 通过阿里云 云产品流转 功能实现设备间消息转发: Android APP (设备A) Air780EP (设备B) │ │ │── 发布到 property/set ──>│ │ │ │ │ │ ┌─────┴─────┐ │ │ │ 阿里云IoT │ │ │ │ 云产品流转 │ │ │ └─────┬─────┘ │ │ │ │ │ │── 转发到 ──>│── 接收 property/set │ │ │── 执行GPIO控制 │ │ │── 上报 property/post │ │ │ │ ┌─────┴─────┐ │ │ │ 阿里云IoT │ │ │ │ 云产品流转 │ │ │ └─────┬─────┘ │ │ │ │ │<── 转发到 ───────────────│ │ │── 接收 property/post │ │ │── 更新UI/存入SQLite │ │ 云产品流转配置要点: 阿里云IoT控制台 → 产品详情 → 云产品流转 配置数据流转规则: 数据源:设备A(APP)发布的 property/set 主题 数据目的:设备B(Air780EP)订阅的 property/set 主题 反向同理:设备B的 property/post 流转到设备A 两个设备共享同一个产品,通过产品内流转实现消息互通 无需额外搭建服务器,阿里云平台内部完成消息路由 2.3 与直连方式的区别 对比项 本项目方式(云产品流转) 直连方式 设备关系 同产品不同设备,云平台转发 不同产品,各自独立连接 消息路由 阿里云内部流转,低延迟 需要额外中转服务器 配置复杂度 阿里云控制台配置流转规则 需开发中转服务 扩展性 添加设备只需配置新流转规则 需修改中转逻辑 安全性 阿里云平台统一鉴权 需自行实现鉴权 三、项目结构 安卓-阿里云-AIR780/ │ ├── Air780EP_Aliyun_LBS/ # Air780EP 4G模组固件 (LuatOS/RTOS) │ ├── main.lua # 主程序入口 │ │ ├── LBS基站定位任务(每60秒) │ │ ├── 设备到期检测(每6秒) │ │ ├── 断网监测与离线计时(每1秒) │ │ ├── 网络时间获取与fskv持久化 │ │ ├── 数据上报主循环(每5秒) │ │ └── GPIO控制与状态管理 │ │ │ ├── aliyun.lua # 阿里云IoT SDK库 │ │ ├── MQTT连接管理(自动重连20秒间隔) │ │ ├── 一机一密 / 一型一密认证 │ │ ├── 消息发布/订阅 │ │ └── OTA固件升级(libfota) │ │ │ ├── testEvt.lua # MQTT消息接收处理 │ │ ├── Switch_A / Switch_B 开关控制 │ │ ├── Upload_count 上传次数设置 │ │ ├── Device_Get_New_T 时间获取次数 │ │ └── Devicestoptime_ 截止时间设定 │ │ │ ├── testYjym.lua # 一机一密认证配置 │ │ ├── ProductKey / DeviceName / DeviceSecret │ │ └── 区域:cn-shanghai,非SSL │ │ │ ├── testPm.lua # 电源管理 │ │ └── 连接成功后进入低功耗模式(LIGHT),关闭USB │ │ │ └── netready.lua # 网络初始化 │ └── SIM卡自动切换(simid 2),等待IP_READY │ └── Remote_Control/ # Android 控制端APP └── app/src/main/java/com/example/remote_control/ │ ├── 【用户认证模块】 │ ├── LoginActivity.java # 登录界面 │ │ ├── 用户名/密码验证(6-12位可见ASCII) │ │ ├── 管理员账户硬编码验证 │ │ ├── 记住密码 / 自动登录 │ │ └── 密码可见性切换 │ │ │ └── RegisterActivity.java # 注册界面 │ ├── 注册码验证(registerlzy) │ ├── 用户名唯一性检查 │ ├── 密码一致性验证 │ └── 输入过滤(仅可见ASCII) │ ├── 【主界面模块】 │ ├── MainActivity.java # 普通用户主界面 │ │ ├── 设备控制入口 │ │ ├── 添加设备 │ │ ├── 数据查询 │ │ └── 退出登录 │ │ │ └── MainActivityAdmin.java # 管理员主界面 │ ├── 设备控制(跳转设备管理) │ ├── 添加设备(含用户分配) │ ├── 数据查询(无归属限制) │ ├── 用户管理 │ └── 退出登录 │ ├── 【设备管理模块】 │ ├── DeviceControlActivity.java # 设备控制列表(普通用户) │ │ ├── 按当前用户过滤设备 │ │ ├── 按添加时间倒序排列 │ │ └── 点击设备发起MQTT连接 │ │ │ ├── DeviceManagerActivity.java # 设备管理(管理员) │ │ ├── 设备列表展示 │ │ ├── 设备详情编辑(归属用户、设备名) │ │ ├── 设备连接 │ │ └── 设备删除 │ │ │ └── AliyunDeviceConnect.java # 设备连接流程 │ ├── 15秒连接超时检测 │ ├── 连接成功后自动请求数据 │ ├── 进度对话框显示 │ └── 连接回调接口 │ ├── 【MQTT通信模块】 │ ├── AliyunOperate.java # MQTT核心操作(单例) │ │ ├── MQTT连接/断开/重连 │ │ ├── 消息发布/订阅 │ │ ├── 消息解析与UI更新 │ │ ├── 数据插入SQLite │ │ └── ScheduledExecutorService自动重连(10秒) │ │ │ ├── AliyunIoTSignUtil.java # HMAC-SHA1签名工具 │ │ ├── 参数字典序排序 │ │ ├── 规范化请求字符串拼接 │ │ └── HMAC-SHA1加密 │ │ │ └── AliyunDataService.java # 后台MQTT服务 │ ├── START_STICKY保活策略 │ ├── Service绑定/解绑 │ └── 资源清理 │ ├── 【数据展示模块】 │ ├── AliyunDataDisp.java # 设备数据显示/控制界面 │ │ ├── 11项数据实时显示 │ │ ├── 开关A/B切换控制 │ │ ├── 手动数据请求 │ │ ├── 时间同步请求 │ │ ├── 截止时间设定(日期+时间+秒) │ │ ├── 高德地图跳转 │ │ └── 历史查询入口 │ │ │ ├── AliyunData_Tx.java # UI数据绑定单例 │ │ └── 11个TextView引用 + MyHelper实例 │ │ │ └── SecondPickerDialog.java # 秒数选择器Dialog │ └── NumberPicker 0-59秒选择 │ ├── 【数据查询模块】 │ └── HistoryQuery.java # 历史数据查询 │ ├── 设备ID + 数据类型 + 时间范围筛选 │ ├── 8种数据类型查询 │ ├── 长按复制数据(500ms阈值) │ ├── 管理员无归属限制 │ └── 触摸事件有效性验证 │ ├── 【用户管理模块】 │ └── UserManagementActivity.java # 用户管理(管理员专用) │ ├── 用户列表(倒序显示) │ ├── 添加/编辑用户 │ ├── 长按删除用户 │ └── 管理员账户保护 │ └── 【数据库模块】 └── MyHelper.java # SQLite数据库 ├── 数据库:DeviceData.db ├── 表:Device_Data └── 字段:_id, deviceId, parameterName, parameter, parameterGetTime 四、Air780EP 运行环境 4.1 RTOS 与 LuatOS Air780EP 模组运行在 RTOS(实时操作系统) 上,具体为合宙自研的 LuatOS 框架,基于底层 RTOS 内核构建。应用层使用 Lua 脚本开发,由 LuatOS 框架解释执行。 ┌─────────────────────────────────────────┐ │ Lua 应用层 │ │ main.lua / testEvt.lua / testYjym.lua │ ├─────────────────────────────────────────┤ │ LuatOS 框架层 │ │ sys / aliyun / gpio / uart / fskv │ │ lbsLoc / mobile / json / zbuff │ ├─────────────────────────────────────────┤ │ RTOS 内核层 │ │ 任务调度 / 定时器 / 信号量 / 消息队列 │ ├─────────────────────────────────────────┤ │ 硬件驱动层 │ │ 4G基带 / UART / GPIO / SPI / I2C │ ├─────────────────────────────────────────┤ │ Air780EP 硬件 │ │ ASR1606 主芯片 + 4G射频 + 外设 │ └─────────────────────────────────────────┘ 4.2 RTOS 特性 RTOS特性 本项目应用 说明 多任务并行 sys.taskInit 创建多个任务 LBS定位任务、主循环任务、网络监测任务并行运行 定时器 sys.timerLoopStart 1秒/6秒/5秒周期任务,基于RTOS硬件定时器 信号量/消息 sys.waitUntil / sys.wait 任务间同步,如等待"IP_READY"信号 协程调度 sys.wait() 非阻塞等待 Lua协程让出CPU,RTOS调度其他任务 看门狗 wdt.init(9000) RTOS级硬件看门狗,防止程序死锁 低功耗管理 testPm.lua RTOS支持LIGHT休眠模式,降低功耗 Flash存储 fskv RTOS提供的Key-Value持久化存储接口 4.3 与传统单片机开发的区别 对比项 Air780EP (RTOS/LuatOS) 传统单片机 (如ESP8266 Arduino) 开发语言 Lua脚本 C/C++ 任务模型 多任务RTOS,协程调度 单任务loop轮询 并发处理 多任务并行,sys.wait非阻塞 需手动管理状态机 网络栈 4G蜂窝网络,原生TCP/IP WiFi,需外部模块 固件更新 OTA远程升级(libfota) 需本地烧录 内存管理 RTOS自动管理,Lua GC 手动管理 启动速度 Lua解释执行,毫秒级启动 编译执行 4.4 LuatOS 主要模块使用 模块 用途 本项目调用 sys 任务管理、定时器、消息 taskInit, timerLoopStart, waitUntil, wait, run aliyun 阿里云IoT SDK connect, subscribe, publish, on gpio GPIO控制 setup, set, get uart 串口通信 setup, write fskv Flash键值存储 init, get, set lbsLoc LBS基站定位 request mobile 蜂窝网络管理 status, reqCellInfo, setAuto json JSON编解码 encode, decode zbuff 字节缓冲区 create, seek, write wdt 看门狗 init, feed 五、技术参数总表 5.1 Air780EP 4G模组固件参数 参数类别 参数名 值/说明 模组型号 Air780EP 合宙4G Cat.1模组 运行系统 RTOS 实时操作系统 开发框架 LuatOS Lua脚本开发,基于RTOS内核 主芯片 ASR1606 固件版本 1.0.2 PROJECT = "aliyundemo_lbsLoc" 调试串口 UART1 波特率 921600 GPIO配置 BOOT_PIN = 0 GPIO0,上拉输出,默认低电平 LED__PIN = 27 GPIO27,上拉输出,默认低电平 看门狗 WDT 超时9000ms,喂狗间隔3000ms MQTT协议 非SSL 端口1883 MQTT区域 cn-shanghai 阿里云华东2 MQTT保活 300秒 keepalive MQTT重连 20秒间隔 aliyun.lua内置 SIM卡 simid 2 自动切换,需插SIM卡 网络模式 mobile.setAuto 6秒注册,60秒搜网超时 定位方式 LBS基站定位 非GPS 定位周期 60秒 lbsLoc.request(getLocCb) 定位超时 3秒 CELL_INFO_UPDATE等待 数据上报周期 5秒 主循环sys.wait(5000) 上报次数限制 每天10次 每6小时刷新+3次 到期检测周期 6秒 timerLoopStart 6000ms 断网检测周期 1秒 timerLoopStart 1000ms 断网容忍时间 300秒(5分钟) 超时后停止设备 时间同步 每6小时 get_New_time=5次 持久化存储 fskv Flash Key-Value存储 时区 UTC+8 所有时间按北京时间处理 时间基准偏移 28800秒 UTC与北京时间差值 5.2 Android APP参数 参数类别 参数名 值/说明 开发语言 Java Android SDK 数据库 SQLite DeviceData.db,版本1 数据存储 SharedPreferences UserPrefs + Aliyun_Triplet MQTT客户端 Eclipse Paho org.eclipse.paho.client.mqttv3 MQTT连接 TCP 1883端口,非SSL MQTT区域 cn-shanghai 华东2 MQTT保活 300秒 MqttConnectOptions MQTT超时 10秒 connectionTimeout 自动重连 10秒间隔 ScheduledExecutorService 连接超时 15秒 AliyunDeviceConnect 签名算法 HMAC-SHA1 AliyunIoTSignUtil 管理员账户 lzyadmin / lzy0424 硬编码,不保存登录态 注册码 registerlzy 预设,注册时校验 用户名规则 6-12位 仅可见ASCII字符 密码规则 6-12位 仅可见ASCII字符 设备物理ID 10位数字 自增,如0000000001 长按阈值 500ms HistoryQuery数据复制 最大移动距离 10px 长按判定容差 地图 高德地图 androidamap:// URI Scheme 时区 Asia/Shanghai UTC+8 5.3 阿里云IoT通信参数 参数类别 参数名 值/说明 认证方式 一机一密 ProductKey + DeviceName + DeviceSecret 连接地址 tcp://{productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883 Client ID {productKey}.{deviceName}|securemode=2,signmethod=hmacsha1| 用户名 {deviceName}&{productKey} 密码 HMAC-SHA1签名值 参数按字典序拼接后加密 订阅主题 /sys/{productKey}/{deviceName}/thing/event/property/post 设备上报 发布主题 /sys/{productKey}/{deviceName}/thing/event/property/set APP控制 自定义主题 /hy5iV6QRUu4/868327073962407/user/control_2 testEvt.lua订阅 消息路由 云产品流转 同产品不同设备间消息转发 5.4 数据交互参数表 参数标识 数据类型 方向 范围/格式 说明 Switch_A int 双向 0/1 开关A(LED_PIN 27)状态 Switch_B int 双向 0/1 开关B(BOOT_PIN 0)状态 Upload_count int 双向 0~50 剩余上传次数,APP设置时传1 Device_Get_New_T int 双向 0~50 获取时间次数,APP设置时传1 Devicestoptime_ long 双向 毫秒时间戳 设备截止时间 Longitude_Z string 上行 整数3位+小数7位 经度(LBS定位) Latitude_Z string 上行 整数3位+小数7位 纬度(LBS定位) Location_Time string 上行 毫秒时间戳 定位时间 Air780EP_Sys_Time string 上行 毫秒时间戳 设备系统时间 Device_Sign_now int 上行 0/1 设备使能状态(1=正常,0=到期/停机) 5.5 SharedPreferences存储结构 UserPrefs(用户数据): Key 类型 说明 {username} String 用户名=密码(key-value存储) remember boolean 是否记住密码 autoLogin boolean 是否自动登录 username String 当前保存的用户名 password String 当前保存的密码 Aliyun_Triplet(设备数据): Key 类型 说明 AliyunDeviceName_{name} String 设备显示名称 productKey_{name} String 阿里云ProductKey deviceName_{name} String 阿里云DeviceName deviceSecret_{name} String 阿里云DeviceSecret BelongingUser_{name} String 设备归属用户名 DevicePhysicalID_{name} String 设备物理ID(10位) AddTime_{name} long 设备添加时间戳(毫秒) 5.6 SQLite数据库结构 数据库名: DeviceData.db,版本1 表名: Device_Data 列名 类型 说明 _id INTEGER 自增主键 deviceId TEXT 设备物理ID parameterName TEXT 参数名(Longitude/Latitude/Switch1/Switch2/LocationTime/DeviceTime/Deadline/DeviceStatus) parameter TEXT 参数值 parameterGetTime TEXT 获取时间(yyyy-MM-dd HH:mm:ss) 5.7 fskv持久化存储(Air780EP端) Key 类型 说明 Fskv_Init boolean 首次初始化标志 Dis_time int 断网累计时间(秒) aliyun_Up int 剩余上传次数 get_New_time_ int 剩余获取时间次数 Sys_Ena int 系统使能状态 L_GPIO_27 int LED_PIN状态 B_GPIO_00 int BOOT_PIN状态 time_year/mon/day/hour/min/sec int 当前时间 time_year_S/mon_S/day_S/hour_S/min_S/sec_S int 截止时间 get_timeY/M/D/H int 下次获取时间触发点 Comp_timeY/M/D int 下次每日重置触发点 更多详情及代码信息请点击项目文件夹查看
一、项目简介 本项目是一套基于 STM32F103ZET6微控制器的 RFID 手持式物品借还管理系统,包含嵌入式固件和PC端上位机软件两个子系统。 嵌入式端:手持设备通过 MFRC522 模块读取 Mifare 射频卡 UID,配合 13 键键盘和 LCD12864 显示屏(SSD1306 驱动,128×64),实现物品借出、归还、会员/物品登记、信息查询等功能。所有数据以 CSV 格式存储在 SD 卡的 .xls 文件中。 PC端上位机:C# WinForms 桌面应用,将 SD 卡中的 .xls 文件导入 SQL Server 数据库,提供数据浏览和搜索功能。 数据流:手持设备写入 SD 卡 .xls 文件 → 物理取出 SD 卡 → PC 端上位机导入数据库 二、技术参数 参数 规格 主控芯片 STM32F103ZET6 (ARM Cortex-M3, LQFP144) Flash / SRAM 512KB / 64KB 系统时钟 72MHz (8MHz HSE × 9 PLL) RFID 模块 MFRC522, 13.56MHz, ISO 14443A (Mifare S50/S70) 射频卡 UID 4 字节 显示屏 LCD12864 (SSD1306 驱动, 128×64, 软件 I2C) 存储 SD 卡 (SPI2 硬件接口, FatFS 文件系统) 键盘 13 键 (0-9 数字键 + Mode/In/Out 功能键) LED 指示灯 PB8, 低电平有效 会员容量 最多 99 人 物品容量 最多 599 件 管理员数量 2 个 (支持密码或管理员卡解锁) 管理员密码 6 位数字, 默认 987654 三、使用的技术与组件 嵌入式固件 类别 技术/组件 编程语言 C 语言 目标芯片 STM32F103ZE (STM32F10X_HD 系列) 固件库 STM32 标准外设库 (StdPeriph Lib) 文件系统 FatFS R0.10a (支持 FAT32) RFID 驱动 MFRC522 软件 SPI 驱动 显示驱动 SSD1306 软件 I2C 驱动 SD 卡驱动 硬件 SPI2 驱动 内存管理 自定义内存池分配器 (malloc.c) 调试工具 USMART 串口调试 Shell, USART1 printf PC 端上位机 类别 技术/组件 编程语言 C# 框架 .NET Framework 4.7.2 UI 框架 Windows Forms (WinForms) 数据库 Microsoft SQL Server Excel 读取 OLE DB (Microsoft.Jet.OLEDB.4.0) 第三方库 Spire.XLS 12.11.3 IDE Visual Studio 2022 四、引脚分配 RC522 RFID (软件 SPI): 信号 引脚 SDA (CS) PA4 SCK PA5 MOSI PA6 MISO PA7 RST PC4 LCD12864 (软件 I2C): 信号 引脚 SCL PF8 SDA PF7 RES PD4 SD 卡 (硬件 SPI2): 信号 引脚 CS PB12 SCK PB13 MISO PB14 MOSI PB15 键盘 (GPIO 输入,上拉,低电平有效): 按键 引脚 按键 引脚 0 PD8 5 PD14 1 PD11 6 PG4 2 PD15 7 PD9 3 PG5 8 PD13 4 PD10 9 PG3 Mode PG6 In PG2 Out PD12 五、运行模式 模式 说明 游客模式 (默认) 刷卡查看物品借还状态,可进入借出流程 管理员模式 输入 6 位密码或刷管理员卡解锁。支持借出、归还、按编号查询、会员/物品登记 录入模式 刷新 RFID 卡注册会员或物品,分配类别和编号
项目说明 本项目是一个基于 STM32F103ZET6 + ESP-01S 双MCU架构的温室大棚环境监测与远程控制系统。STM32 负责本地传感器数据采集、LCD显示和执行器控制;ESP-01S 负责WiFi联网,通过 阿里云IoT平台(MQTT协议) 将数据上报云端,并接收远程控制指令。支持本地按键手动控制和云端远程控制两种模式。 通过连接ESP01S开启的WIFI,访问对应IP,进行配置WIFI连接参数和云平台连接参数,可以重置。 系统架构 [传感器群] --> [STM32F103ZE] --UART3(115200)--> [ESP-01S] --MQTT--> [阿里云IoT] ^ | | | +--- LED/蜂鸣器/LCD <-- 按键控制 / 远程指令 <---+ 核心功能 环境监测:温度、湿度、光照、土壤湿度、降雨、4种气体(H2S/CO2/PM2.5/CO) 本地显示:TFT LCD 实时显示所有传感器数值 本地控制:4个按键分别控制水泵、风扇、加湿器、LED灯 远程控制:阿里云IoT平台下发8路开关指令(Switc0-Switc7) 云端上报:所有传感器数据实时上传阿里云 WiFi配网:ESP-01S 内置 Captive Portal,首次使用连接AP 智能大棚网络配置 即可配置WiFi和阿里云凭证 技术参数总表 主控芯片 项目 参数 MCU STM32F103ZE (Cortex-M3, 72MHz) Flash / RAM 512KB / 64KB 开发板 ALIENTEK 战舰(WarShip) WiFi模块 ESP-01S (ESP8266, 80MHz, 802.11 b/g/n) 传感器参数 传感器 型号/类型 量程 接口 引脚 温湿度 DHT11 温度0-50°C / 湿度20-90%RH 单总线 PG11 光照 BH1750 1-65535 lx (分辨率0.5lx) 软件I2C PD6(SCL), PD7(SDA) 硫化氢 MQ-136 模拟量 (0-3.3V) ADC1_CH10 PC0 二氧化碳 MG811 模拟量 (0-3.3V) ADC1_CH11 PC1 PM2.5 GP2Y 模拟量 (0-3.3V) ADC1_CH12 PC2 (IR脉冲: PB1) 一氧化碳 CO传感器 模拟量 (0-3.3V) ADC1_CH13 PC3 土壤湿度 土壤传感器 模拟+数字 ADC2_CH5 + GPIO PA5(AO), PA4(DO) 降雨 雨滴传感器 模拟+数字 ADC2_CH6 + GPIO PA6(AO), PA1(DO) 执行器 设备 引脚 说明 LED0 PB5 补光灯/状态指示 LED1 PE5 补光灯/状态指示 蜂鸣器 PB8 报警 TFT LCD FSMC (NE4, A10=RS) 本地显示,背光PB0 用户输入 按键 引脚 功能 KEY0 PE4 切换开关4(加湿器) KEY1 PE3 切换开关3(风扇/通风) KEY2 PE2 切换开关2(水泵) WK_UP PA0 重置WiFi配置 通信协议 链路 协议 波特率 说明 STM32 ↔ ESP-01S 自定义UART帧协议 115200 16字节定长包,F开头#结尾,校验和 ESP-01S ↔ 阿里云 MQTT — 通过AliyunIoTSDK库 STM32 → LCD/存储 FSMC / SDIO / SPI — LCD、SD卡、W25Q128字库 上行数据帧格式(STM32 → ESP-01S) 字节0: 'F' (帧头) 字节1: 数据类型 ('0'=整型, '1'=浮点, '2'=电压) 字节2-7: 物模型ID (6字符, 如"Temper", "Humidi", "LightL") 字节8-13: 数据值 (6位ASCII数字) 字节14: 校验和 = (字节1-11之和) % 127 字节15: '#' (帧尾) 轮询通道(每600ms一帧):温度→湿度→土壤→雨量→光照→Switc0→Switc1→H2S→CO2→PM2.5→CO 阿里云物模型属性 属性 类型 方向 说明 Temper int 上报 温度 Humidi int 上报 湿度 LightL int 上报 光照 soilPH float 上报 土壤湿度电压 rainIO float 上报 雨量电压 sulfid float 上报 H2S电压 Datco2 float 上报 CO2电压 AQIaqi float 上报 PM2.5电压 Dataco float 上报 CO电压 Switc0-Switc7 int 双向 8路远程开关
本项目是一个基于 ESP8266 微控制器的工业级数字显示终端设备,应用于需要远程监控现场拨码设定值的场景。设备通过 4 位 BCD 拨码开关手动设定 0000~9999 的目标数值,经两片级联的 74HC165 并行转串行移位寄存器读取后,驱动外置 4 位 7 段数码管实时显示当前值及工作状态。设备通过 WiFi 接入阿里云 IoT 物联网平台,采用 MQTT 协议实现数据双向通信:一方面定时上报当前拨码数值和设备使能状态,另一方面接收云端下发的远程控制指令(启用/禁用设备)。支持 WiFi AP 模式 Captive Portal(门户劫持)配网,首次使用时用户可通过手机连接设备热点自动弹出配网页面,输入家庭/工厂 WiFi 密码即可完成联网配置,配置信息持久化存储于 EEPROM 中,断电不丢失。 系统架构 ┌─────────────┐ 并行数据 ┌──────────────┐ 串行数据 ┌──────────┐ │ 4位BCD拨码盘 │──────────────→│ 2×74HC165 │─────────────→│ ESP8266 │ │ (手动设定值) │ (4×4bit) │ (级联移位) │ (16bit) │ 主控MCU │ └─────────────┘ └──────────────┘ └────┬─────┘ │ ┌────────────┼────────────┐ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ 4位7段 │ │ 阿里云 │ │ 2个按键 │ │ 数码管 │ │ IoT平台 │ │ 2个LED │ │(UART驱动)│ │ (MQTT) │ │(状态指示)│ └──────────┘ └──────────┘ └──────────┘ 硬件详细说明 4.1 核心元器件清单 序号 元器件 型号/规格 数量 用途 1 主控芯片 ESP8266 (ESP-01/NodeMCU) 1 系统核心,WiFi 通信 2 移位寄存器 74HC165 2 并行转串行,读取 BCD 拨码 3 BCD 拨码开关 4 位 BCD 旋转拨码盘 1 手动设定 0~9999 数值 4 7 段数码管 4 位 LED 数码管(UART 驱动型) 1 显示数值和状态 5 按键 轻触按键 2 复位/确认操作 6 LED 指示灯 3mm/5mm LED 2 按键状态指示 7 上拉电阻 10KΩ 若干 按键和 74HC165 上拉 4.2 引脚分配表 ESP8266 引脚 GPIO 编号 连接目标 方向 说明 D0 GPIO16 复位按键 INPUT 内部下拉,按键接地 D1 GPIO5 确认按键 INPUT 内部下拉,按键接地 D2 GPIO4 复位 LED OUTPUT 复位模式指示灯 D3 GPIO0 确认 LED OUTPUT 确认模式指示灯 D5 GPIO14 74HC165 PL (锁存) OUTPUT LOW→HIGH 锁存数据 D6 GPIO12 74HC165 CP (时钟) OUTPUT 上升沿移位 D7 GPIO13 74HC165 Q7 (数据) INPUT 串行数据输出 RX (GPIO3) GPIO3 数码管 TX OUTPUT 软串口发送 (9600 baud) TX (GPIO1) GPIO1 数码管 RX — 软串口 (与烧录口冲突) 4.3 74HC165 级联电路 两片 74HC165 采用级联方式(第一片 Q7 接第二片 SER),共读取 16 位数据: 拨码盘位1 (千位): RegisterData[4~7] = 高4bit, RegisterData[0~3] = 低4bit 拨码盘位2 (百位): ───────────────────────────────────────────────────────── 拨码盘位3 (十位): RegisterData[12~15] = 高4bit, RegisterData[8~11] = 低4bit 拨码盘位4 (个位): ───────────────────────────────────────────────────────── 注意:74HC165 读出的数据需要取反(~)才是实际的 BCD 值。 BCD 拨码编码表 拨码盘采用加一码(偏移二进制编码),物理拨码位置与实际数字存在 +1 偏移: 物理拨码位置 BCD 二进制 (DCBA) 实际显示数字 0 0001 0 1 0010 1 2 0011 2 3 0100 3 4 0101 4 5 0110 5 6 0111 6 7 1000 7 8 1001 8 9 1010 9 超出 0001~1010 范围(含 0000)视为读取错误,触发错误状态(状态 0)。 技术参数总表 项目 参数 主控芯片 ESP8266 (ESP-01/NodeMCU) 开发框架 Arduino 程序语言 C/C++ (Arduino) 代码行数 约 840 行(优化后) 移位寄存器 2× 74HC165 级联(16 位并行转串行) BCD 输入 4 位拨码开关(加一码编码,00011010 对应 09) 采样策略 连续 10 次采样,多数表决去抖(≥5 次 LOW 判 LOW) 单次采样耗时 约 80ms(16bit × 250μs × 2 × 10) 数码管接口 UART 软串口(GPIO3 RX / GPIO1 TX),9600 baud,8N1 数码管帧长 13 字节(4 位显示)/ 8 字节(单位显示) 通信校验 Modbus CRC16(查表法,256 字节查找表) 云平台 阿里云 IoT(MQTT 协议) 上报周期 1 秒(由定时器中断驱动) 上报属性 Dialer_Number(拨码值)、Dialer_Switch_whole_Control(使能状态) 下行控制 Dialer_Switch_whole_Control(0=禁用, 1=启用) 配网方式 WiFi AP 模式 + Captive Portal(DNS 劫持) AP 名称 Network Configuration AP IP 192.168.4.1 WiFi 超时 20 秒(超时自动重启,不重新配网) 配网等待 上电 12 秒无操作自动进入 自动重连 WiFi.setAutoReconnect(true) 定时器 ESP8266 硬件定时器,1 秒中断 中断函数 IRAM_ATTR TimerHandler() 按键 2 个(复位 D0/GPIO16,确认 D1/GPIO5) 按键去抖 20ms 延时 + 状态标志位防冲突 指示灯 2 个 LED(D2/GPIO4 复位灯,D3/GPIO0 确认灯) 数据存储 EEPROM(WiFi 凭据 96 字节 + 控制标志 1 字节,起始地址 2448) 恢复出厂 双键长按 3 秒,清除 WiFi 配置并重启 依赖库 TimerInterrupt_Generic、SoftwareSerial、EEPROM、ESP8266WiFi、DNSServer、ESP8266WebServer、AliyunIoTSDK 代码及更多详情请看Code代码文件夹
以前写的项目,由于是那个时候是自己手敲的,所有观赏性不太好,但功能是完美无错的 可以通过AI解读整理,变成你们自己的项目,感兴趣可以下载代码或者在线预览观看。 基于 ESP32 接入阿里云 IoT 平台的温湿度监测与远程控制系统,集成 Web 自动配网功能,无需修改代码即可配置 WiFi 和阿里云设备信息。通过 DHT11 传感器采集环境温湿度数据上报阿里云,同时支持远程控制板载 LED 开关。 核心功能: 阿里云 IoT 接入:通过 MQTT 协议连接阿里云物联网平台,实时上报温度、湿度和开关状态 远程开关控制:阿里云下发 PowerSwitch_1 属性控制板载 LED 亮灭,可联动继电器扩展控制实际电器 温湿度采集:DHT11 传感器每 2 秒读取一次温度和湿度,上报至阿里云 CurrentTemperature 和 CurrentHumidity 属性 Web 自动配网:首次使用无需烧录固件,通过 AP 热点网页填写 WiFi 和阿里云设备信息,写入 EEPROM 后自动重启连接 EEPROM 持久化:WiFi 配置和阿里云四元组存储在 EEPROM,断电不丢失 硬件组成: 模块 引脚 用途 ESP32 主控 — 系统核心,WiFi + BLE DHT11 温湿度传感器 GPIO4 环境温湿度采集 板载 LED GPIO2 开关状态指示 / 继电器控制端 阿里云平台配置 登录 阿里云 IoT 物联网平台 创建产品 → 添加设备,获取四元组信息: ProductKey DeviceName DeviceSecret RegionId(如 cn-shanghai) 在产品功能定义中添加以下属性(标识符需与代码一致): CurrentTemperature(只读,浮点型) CurrentHumidity(只读,浮点型) PowerSwitch_1(读写,布尔型) 如需手机远程控制,在阿里云创建高级版规则引擎或使用「物模型」服务
以前写的项目,由于是那个时候是自己手敲的,所有观赏性不太好,但功能是完美无错的 可以通过AI解读整理,变成你们自己的项目,感兴趣可以下载代码或者在线预览观看。 基于 ESP32 / ESP8266 接入 Blinker 物联网平台的智能开关系统,支持手机 APP 远程控制和小爱同学语音控制。项目包含两个版本: ESP32 版本 — 集成 DHT11 温湿度传感器,可实时上报温湿度数据,支持定时器中断采样。引脚 GPIO4 接 DHT11,GPIO34 为 WiFi 重置按键。 ESP8266 版本 — 纯开关控制版本,板载 LED 作为执行端,通过 Blinker 平台实现远程开关和语音控制。 共通功能: Blinker APP 控制:通过按钮组件控制 LED 开/关,实时反馈状态 小爱同学语音控制:支持"打开灯"/"关闭灯"语音指令,支持状态查询 Web 配网:首次使用无需烧录固件修改 WiFi 信息,通过 AP 热点网页填写 WiFi 名称、密码和 Blinker 密钥 EEPROM 持久化:WiFi 配置和 Blinker 密钥写入 EEPROM,断电不丢失 自动重置:WiFi 连接超时 15 秒自动重置配置,进入配网模式 启动/配置方式 1. 前置准备 安装 Arduino IDE ESP32:开发板管理器添加 https://dl.espressif.com/dl/package_esp32_index.json,安装 ESP32 开发板包 ESP8266:开发板管理器添加 http://arduino.esp8266.com/stable/package_esp8266com_index.json,安装 ESP8266 开发板包 安装库:Blinker(库管理器搜索 Blinker)、DHT sensor library(ESP32 版本需要)、Servo 2. Blinker 平台配置 手机下载「点灯 Blinker」APP 注册登录后,添加设备 → 选择独立设备 → 获取 设备密钥(Auth Key) 添加组件:按钮(数据键名 btn-Light1)、数值(num-abc)、数值(humi)、数值(temp) 如需小爱同学控制:在米家 APP 中绑定 Blinker 技能 代码文件请看Code文件夹
以前写的项目,由于是那个时候是自己手敲的,所有观赏性不太好,但功能是完美无错的 可以通过AI解读整理,变成你们自己的项目,感兴趣可以下载代码或者在线预览观看。 指纹密码锁 基于 STC89C52(51内核)单片机设计的多功能指纹密码锁系统,集成指纹识别、密码输入、温度检测于一体。 功能特性: 密码开锁:4位数字密码输入,支持明文/密文显示切换,连续输错3次锁定60秒 指纹开锁:通过 AS608 光学指纹模块实现指纹录入、搜索匹配和删除,最多存储1000枚指纹 密码管理:支持修改密码(需验证原密码,两次新密码确认),支持备用密码切换 温度检测:DS18B20 数字温度传感器实时采集环境温度,精确到小数点后3位 数据持久化:AT24C02 EEPROM 存储密码和错误次数,断电不丢失 舵机控制:验证成功后舵机正转开锁,自动反转归位 硬件组成: 模块 型号 用途 主控芯片 STC89C52 系统核心控制 指纹模块 AS608 指纹采集与识别 显示屏 LCD1602 状态与信息显示 输入设备 4×4矩阵键盘 密码输入与功能选择 执行机构 SG90舵机 门锁开关动作 温度传感器 DS18B20 环境温度检测 存储芯片 AT24C02 密码与配置掉电保存 通信接口 UART串口 单片机与指纹模块通信
以前写的项目,由于是那个时候是自己手敲的,所有观赏性不太好,但功能是完美无错的 可以通过AI解读整理,变成你们自己的项目,感兴趣可以下载代码或者在线预览观看。 基于 51 单片机(STC89C52)的红外遥控电机调速项目。系统通过外部中断与定时器实现 NEC 红外协议解码,识别遥控器按键 `0/1/2/3` 并切换 4 档速度:停止、低速、中速、高速;电机采用软件 PWM 控制,数码管实时显示当前档位。项目完整覆盖了中断、定时器、红外解码和电机驱动等嵌入式核心功能。