智能插座是一款常见的智能设备,使用智能插座可以远程控制连接的电器,可以实时查看电器的状态,极大的方便了人们的生活。基于涂鸦 IoT 平台可以简单、快速完成一款智能插座的开发,本文介绍如何使用涂鸦三明治开发板快速完成一个智能插座产品原型。
MCU 方案与 SoC 方案不同,开关和联网模组的驱动代码写在 MCU 中,您可以自行开发 MCU 代码,拥有更多的可玩性。
涂鸦三明治开发板插座套件中,MCU输出高低电平给插座功能板控制开关通断,MCU 通过串口与 BLE 通信板连接,使用涂鸦智能 App 配网,可以将开关状态展现在手机端,并与其他智能设备联动。MCU 型号为 STM32G071RB,本教程采用 Arduino IDE 进行编程,可方便的移植于各 Arduino 系列开发板。
本次使用的涂鸦三明治开发板温湿度传感套件主要包含:
将三明治开发板套件控制板、通讯板、功能板拼接组装,实物效果如下图。
软件开发过程主要基于 Arduino 实现 MCU 与插座和模组协议对接。首先调通 MCU 和模组的通讯,可以实现 App 配网,MCU 数据传输到App。
参考 搭建 MCU 环境 完成三明治开发板环境搭建。您需要在 Arduino IDE 中添加 ST 开发板,集成 STM32CubeProgrammer 实现编译下载功能。
您可以根据以下步骤,快速在涂鸦 IoT 平台上开发一个智能插座。
进入 涂鸦智能IoT平台。
参考 选品类创建产品 创建一款插座产品。其中产品属性如下:
开发方式:自定义方案
联网方式:BLE
功耗类型:标准功耗
根据页面提示选择产品的标准功能和自定义功能。例如,功能选择为开关。
选择您喜欢的面板,第一次开始调试也可以选择为开发调试面板,便于调试,后面也可以更换面板。
进入 硬件开发 阶段,硬件开发步骤中模组选择 BT3L 蓝牙模组,固件选择蓝牙单点通用方案。
在页面拉到最下面,下载开发资料。
硬件测试。
下载到 MCU 开发包后,使用开发包中的涂鸦模组调试助手,您可以使用助手模拟 MCU 模式,配合调试模组通讯板,验证模组是否通讯正常,同时也可以熟悉涂鸦串口协议提高对接效率。确定通信板正常可用的,可以跳过此步骤。若调试过程中对协议收发有疑问,也可以使用此助手协助查看正确数据交互格式。 使用步骤可参考 涂鸦模组调试助手。
参考 MCU SDK开发包移植调试 进行移植调试。
移植成功配网会看到选择的产品面板。
本章节中,您可以参考应用层示例代码实现 App 下发指令到模组,通过 MCU 控制插座开关,获取开关状态后,MCU 将状态传输给 App 展示。
#include "bluetooth.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(0, 1); // RX, TX
#define _SS_MAX_RX_BUFF 300
#define relay 10
int time_cnt = 0, cnt = 0, init_flag = 0;
void setup() {
// put your setup code here, to run once:
pinMode(relay, OUTPUT); //继电器IO初始化
digitalWrite(relay, LOW);
pinMode(PC13, INPUT); //重置蓝牙按键初始化
pinMode(8, OUTPUT); //蓝牙状态指示灯初始化
mySerial.begin(9600); //软件串口初始化
mySerial.println("myserial init SUCCESS_ful!");
Serial.begin(115200); //PA3 RX PA2 TX
Serial.println("serial init SUCCESS_ful!");
bt_protocol_init();
}
void loop() {
// put your main code here, to run repeatedly:
if (init_flag == 0) {
time_cnt++;
if (time_cnt % 6000 == 0) {
time_cnt = 0;
cnt ++;
}
bt_stat_led(&cnt); //蓝牙状态处理
}
bt_uart_service();
myserialEvent(); //串口接收处理
key_scan(); //重置配网按键检测
}
void myserialEvent() {
if (mySerial.available()) {
unsigned char ch = (unsigned char)mySerial.read();
uart_receive_input(ch);
}
}
void bt_stat_led(int *cnt)
{
#define bt_stat_led 8
switch (mcu_get_bt_work_state())
{
case 0x00: //0x00
init_flag = 0;
if (*cnt == 2) {
*cnt = 0;
}
if (*cnt % 2 == 0) //LED快闪
{
digitalWrite(bt_stat_led, LOW);
}
else
{
digitalWrite(bt_stat_led, HIGH);
}
break;
case 0x01: //0x01
init_flag = 0;
if (*cnt >= 30) {
*cnt = 0;
}
if (*cnt == 0) //LED慢闪
{
digitalWrite(bt_stat_led, LOW);
}
else if (*cnt == 15)
{
digitalWrite(bt_stat_led, HIGH);
}
break;
case 0x02: //0x02
digitalWrite(bt_stat_led, HIGH); //LED熄灭
break;
case 0x03: //0x03
break;
case 0x04: //0x04
if ( 0 == init_flag )
{
digitalWrite(bt_stat_led, LOW);//LED常亮
init_flag = 1; //bt连接上后该灯可控
*cnt = 0;
}
break;
default:
digitalWrite(bt_stat_led, HIGH);
break;
}
}
基于涂鸦平台,使用涂鸦三明治开发板,Arduino IDE编程,您可以快速实现一款智能智能插座产品原型搭建。
该内容对您有帮助吗?
是我要提建议