基于物联网设计的智能储物柜(4G+华为云IOT+微信小程序)【玩转华为云】 | 您所在的位置:网站首页 › 储物柜定义 › 基于物联网设计的智能储物柜(4G+华为云IOT+微信小程序)【玩转华为云】 |
// 引入必要的库
#include
#include
// 定义串口通信相关的寄存器地址
#define UART_BAUD_RATE_H 0xFD // 波特率高位
#define UART_BAUD_RATE_L 0xFE // 波特率低位
#define UART_CONTROL_REG 0x98 // 控制寄存器地址
// 定义MQTT服务器信息
#define MQTT_SERVER "mqtt.example.com" // MQTT服务器地址
#define MQTT_PORT "1883" // MQTT端口号
// 定义设备ID和认证信息
#define DEVICE_ID "your_device_id" // 设备ID
#define USERNAME "your_username" // 用户名
#define PASSWORD "your_password" // 密码
// 定义订阅主题
#define SUBSCRIBE_TOPIC "your_subscribe_topic" // 订阅主题
// 定义电磁锁的IO口连接图纸
#define LOCK_1 P2_0 // 电磁锁1的控制IO口
#define LOCK_2 P2_1 // 电磁锁2的控制IO口
#define LOCK_3 P2_2 // 电磁锁3的控制IO口
#define LOCK_4 P2_3 // 电磁锁4的控制IO口
#define LOCK_5 P2_4 // 电磁锁5的控制IO口
#define LOCK_6 P2_5 // 电磁锁6的控制IO口
#define LOCK_7 P2_6 // 电磁锁7的控制IO口
#define LOCK_8 P2_7 // 电磁锁8的控制IO口
#define LOCK_9 P3_0 // 电磁锁9的控制IO口
#define LOCK_10 P3_1 // 电磁锁10的控制IO口
#define LOCK_11 P3_2 // 电磁锁11的控制IO口
#define LOCK_12 P3_3 // 电磁锁12的控制IO口
// 定义MQTT协议相关指令
#define CONNECT_CMD "AT+CMQTTCONN=\"" MQTT_SERVER "\",\"" MQTT_PORT "\",\"" DEVICE_ID "\",\"" USERNAME "\",\"" PASSWORD "\"\r\n" // 连接指令
#define SUBSCRIBE_CMD "AT+CMQTTSUB=\"" SUBSCRIBE_TOPIC "\",1\r\n" // 订阅指令
// 定义串口发送函数
void UART_SendString(char *str) {
while (*str) {
SBUF = *str;
while (!TI);
TI = 0;
str++;
}
}
// 电磁锁控制函数
void controlLock(int lockNumber, int lockState) {
switch (lockNumber) {
case 3:
// 控制电磁锁3
if (lockState == 1) {
// 打开电磁锁
LOCK_3 = 1;
} else {
// 关闭电磁锁
LOCK_3 = 0;
}
break;
case 4:
// 控制电磁锁4
if (lockState == 1) {
// 打开电磁锁
LOCK_4 = 1;
} else {
// 关闭电磁锁
LOCK_4 = 0;
}
break;
case 5:
// 控制电磁锁5
if (lockState == 1) {
// 打开电磁锁
LOCK_5 = 1;
} else {
// 关闭电磁锁
LOCK_5 = 0;
}
break;
case 6:
// 控制电磁锁6
if (lockState == 1) {
// 打开电磁锁
LOCK_6 = 1;
} else {
// 关闭电磁锁
LOCK_6 = 0;
}
break;
case 7:
// 控制电磁锁7
if (lockState == 1) {
// 打开电磁锁
LOCK_7 = 1;
} else {
// 关闭电磁锁
LOCK_7 = 0;
}
break;
case 8:
// 控制电磁锁8
if (lockState == 1) {
// 打开电磁锁
LOCK_8 = 1;
} else {
// 关闭电磁锁
LOCK_8 = 0;
}
break;
case 9:
// 控制电磁锁9
if (lockState == 1) {
// 打开电磁锁
LOCK_9 = 1;
} else {
// 关闭电磁锁
LOCK_9 = 0;
}
break;
case 10:
// 控制电磁锁10
if (lockState == 1) {
// 打开电磁锁
LOCK_10 = 1;
} else {
// 关闭电磁锁
LOCK_10 = 0;
}
break;
case 11:
// 控制电磁锁11
if (lockState == 1) {
// 打开电磁锁
LOCK_11 = 1;
} else {
// 关闭电磁锁
LOCK_11 = 0;
}
break;
case 12:
// 控制电磁锁12
if (lockState == 1) {
// 打开电磁锁
LOCK_12 = 1;
} else {
// 关闭电磁锁
LOCK_12 = 0;
}
break;
default:
// 锁编号无效
break;
}
}
// 主函数
void main() {
// 配置串口通信波特率为9600bps
PCON = 0x00;
TMOD = 0x20;
TH1 = UART_BAUD_RATE_H;
TL1 = UART_BAUD_RATE_L;
TR1 = 1;
SCON = UART_CONTROL_REG;
// 连接MQTT服务器
UART_SendString(CONNECT_CMD);
// 等待连接成功的回复
// 编写等待回复的代码
// 订阅主题
UART_SendString(SUBSCRIBE_CMD);
// 等待订阅成功的回复
// 编写等待回复的代码
// 设备登录成功,进入循环
while (1) {
// 接收到MQTT消息后,解析并控制对应的电磁锁
// 编写接收和解析MQTT消息的代码
// 设备接收到的消息格式为 "LOCK_X_ON" 或 "LOCK_X_OFF",其中 X 为电磁锁编号
// 解析消息,并提取电磁锁编号和状态
int lockNumber; // 电磁锁编号
int lockState; // 电磁锁状态,0表示关闭,1表示打开
if (strncmp(receivedMessage, "LOCK_", 5) == 0) {
lockNumber = receivedMessage[5] - '0'; // 提取锁编号
if (strstr(receivedMessage, "ON") != NULL) {
lockState = 1; // 提取锁状态,ON表示打开
} else if (strstr(receivedMessage, "OFF") != NULL) {
lockState = 0; // 提取锁状态,OFF表示关闭
}
// 控制对应的电磁锁
controlLock(lockNumber, lockState);
}
}
}
六、总结
这款基于单片机设计的智能储物柜是一种应用于游乐场、商场和景区等场所的便捷储物解决方案。用户可以通过微信小程序实时查看储物柜的可用状态,并选择指定柜子进行解锁。 该智能储物柜支持4G联网,采用主控芯片STC12C5A60S2和4G联网模块E29 Cat-1来实现与网络的连接。用户在解锁储物柜时需要支付押金(预付金),随后系统开始计时并按照使用的时间进行收费。储物柜也支持临时解锁和存取物品功能。用户完成使用后,可以通过微信小程序完成订单结算。 储物柜的锁采用电磁锁技术,通过控制相应的IO口来实现开锁或关锁。整体而言,该智能储物柜以单片机为核心,集成了4G通信模块、电磁锁和华为云物联网服务器等技术,提供方便、安全的储物服务。每个储物柜都是一个独立的设备,通过华为云物联网服务器实现数据传输和管理。 基于单片机设计的智能储物柜在不同场所为用户提供便捷的储物解决方案,通过技术的融合和应用,提升用户体验和管理效率。 |
CopyRight 2018-2019 实验室设备网 版权所有 |