本项目基于 STM32F103C8T6 单片机,通过串口与涂鸦三明治 Wi-Fi MCU 通信板(WB3S) 进行数据交互,通过单片机检测按键进行配网,通过单片机检测限位开关的电平变化来检测座位是否有人坐下。除此之外,还能通过称重传感器检测常规座位的压力变化,将其反馈到 IoT 云端。
适用于涂鸦 IoT 自定义方案中,照明、台灯、灯丝灯、调光器、照明遥控器、排插、开关、家电、运动健康、传感类产品原型。
能够与涂鸦三明治开发板进行良好的拼接,降低开发难度。
座位拓展板
座位拓展板总图
座位拓展板 PCB 3D 模型与实物图
座位拓展板介绍
座位拓展板将 STM32duino 中的引脚引出,方便连接限位开关,同时引出了两路 作为常规座位的压力传感器测量。本项目的座位拓展板为 DEMO 板,仍有较多引脚 未引出,在之后升级中仍可提供更多座位检测限位开关。
STM32duino 开发板
STM32duino 总图
STM32duinoPCB 3D 图与实物图
STM32duino 主控板介绍
采用瑞士意法半导体的 STM32F103C8T6 作为主控芯片,同时兼容 GD32C8T6 芯片,板载 RTC 时钟电路和 Wi-Fi 状态指示灯。同时拥有 Arduino uno 的 外形,能够与涂鸦三明治开发板进行良好的拼接,降低开发难度。
软件开发采用 KEIL5 进行,配合 涂鸦 IoT 平台 生成的 SDK 文件,大大简化了链接到 IoT 云端的速度。如何在涂鸦 IoT 平台获取嵌入式软件开发所需的 SDK,可以参考 硬件开发。
/**
* @brief 串口发送数据
* @param[in] {value} 串口要发送的 1 字节数据
* @return Null
*/
void uart_transmit_output(unsigned char value)
{
USART_SendData(USART1,(unsigned char)value);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);
}
/**
* @brief 串口 1 中断函数
* @param
* @return Null
*/
void USART1_IRQHandler(void)
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //涂鸦智能 串口中断
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
uart_receive_input(Res);
}
- 8 -
- }
void key_scan(void)
{
static char ap_ez_change = 0;
if(KEY_Config_Read() == 0){
delay_ms(3000);
if (KEY_Config_Read() == 0) {
init_flag = 0;
switch (ap_ez_change) {
case 0 :
mcu_set_wifi_mode(SMART_CONFIG);
break;
case 1 :
mcu_set_wifi_mode(AP_CONFIG);
break;
default:
break;
}
ap_ez_change = !ap_ez_change;
}
}
}
void wifi_stat_led(int *cnt)
{
switch (mcu_get_wifi_work_state())
{
case SMART_CONFIG_STATE://0x00
init_flag = 0;
if (*cnt == 2) {
*cnt = 0;
}
if (*cnt % 2 == 0)//LED 快闪
{
LED_WIFI_on();
}
else
{
LED_WIFI_off();
}
break;
case AP_STATE: //0x01
init_flag = 0;
if (*cnt >= 30) {
*cnt = 0;
}
if (*cnt == 0)// LED 慢闪
{
LED_WIFI_on();
}
else if (*cnt == 15)
{
LED_WIFI_off();
}
break;
case WIFI_NOT_CONNECTED:// 0x02
LED_WIFI_off();//LED 熄灭
break;
case WIFI_CONNECTED: // 0x03
break;
case WIFI_CONN_CLOUD:// 0x04
if ( 0 == init_flag )
{
LED_WIFI_on();// LED 常亮
init_flag = 1; // Wi-Fi 连接上后该灯可控
*cnt = 0;
}
break;
default:
LED_WIFI_off();//LED 熄灭
break;
}
}
//座位扫描
void CHAIR_SCAN(void)
{
//座椅二
if(CHAIR2_Read() == 1)//高电平 无人坐下 未触发
{
if(chair_2 == 1)
{
chair_2 = 0;
mcu_dp_bool_update(DPID_CHAIR_2,chair_2); //BOOL 型数据上报;
}
}
else if(CHAIR2_Read() == 0)//触发 有人坐下
{
if(chair_2 == 0)
{
chair_2 = 1;
mcu_dp_bool_update(DPID_CHAIR_2,chair_2); //BOOL 型数据上报;
}
}
//...............多个座位类似
}
限位开关效果展示
在智慧校园活动中,让我第一次接触到涂鸦智能的硬件设备,不仅在产品使用上有很大的便利性,活动支持也做的相当不错。这次的校园座位检测系统还可以基于涂鸦 IoT 平台继续丰富功能,进行产品迭代。