新闻  |   论坛  |   博客  |   在线研讨会
邻居们都眼红了!隔壁程序员开发了一款智能插座,懒人福利
智能物联研习社 | 2021-01-20 16:10:35    阅读:183   发布文章

智能插座是一款常见的智能设备,使用智能插座可以远程控制连接的电器,可以实时查看电器的状态,极大的方便了人们的生活。基于涂鸦 IoT 平台可以简单、快速完成一款智能插座的开发,本文介绍如何使用涂鸦三明治开发板快速完成一个智能插座产品原型。

方案介绍

MCU 方案与 SoC 方案不同,开关和联网模组的驱动代码写在 MCU 中,您可以自行开发 MCU 代码,拥有更多的可玩性。

涂鸦三明治开发板插座套件中,MCU输出高低电平给插座功能板控制开关通断,MCU 通过串口与 BLE 通信板连接,使用涂鸦智能 App 配网,可以将开关状态展现在手机端,并与其他智能设备联动。MCU 型号为 STM32G071RB,本教程采用 Arduino IDE 进行编程,可方便的移植于各 Arduino 系列开发板。

物料清单

硬件 (3) 软件 (1)

  • 涂鸦三明治插座功能板 数量:1

  • 提供交流电通断功能与电量统计功能。采用晶丰 BT01 电源芯片、贝岭 BL9037 计量芯片、贝岭 BL1117-3.3 LDO芯片、宏发继电器等关键器件实现计量,输出断电等功能。

  • NUCLEO-G071RB 数量:1

  • STM32G071RB MCU 官方开发板。负责插座开关控制和模组通讯控制。NUCLEO-G071RB 开发板支持 Arduino 接口。

  • 涂鸦三明治 BLE MCU 通信板(BT3L) 数量:1

  • 板载涂鸦 BT3L 模组,负责智能化连接。模组已烧录通用固件,MCU 对接涂鸦串口协议,即可使用涂鸦模组、App、云等一站式智能化服务。


    步骤:

    第 1 步:硬件连接

    本次使用的涂鸦三明治开发板温湿度传感套件主要包含:

  • 插座功能板

  • BLE MCU 通信板

  • ST 官方 NUCLEO-G071RB 开发板(MCU控制板)

  • 将三明治开发板套件控制板、通讯板、功能板拼接组装,实物效果如下图。

    邻居们都眼红了!隔壁程序员开发了一款智能插座,懒人福利


    第 2 步:例程环境

    软件开发过程主要基于 Arduino 实现 MCU 与插座和模组协议对接。首先调通 MCU 和模组的通讯,可以实现 App 配网,MCU 数据传输到App。

    参考 搭建 MCU 环境 完成三明治开发板环境搭建。您需要在 Arduino IDE 中添加 ST 开发板,集成 STM32CubeProgrammer 实现编译下载功能。

  • 第 3 步:创建产品和项目

  • 您可以根据以下步骤,快速在涂鸦 IoT 平台上开发一个智能插座。

    1、进入 涂鸦智能IoT平台。

    2、参考 选品类创建产品 创建一款插座产品。其中产品属性如下:

    开发方式:自定义方案

    联网方式:BLE

    功耗类型:标准功耗

    邻居们都眼红了!隔壁程序员开发了一款智能插座,懒人福利


    3、根据页面提示选择产品的标准功能和自定义功能。例如,功能选择为开关。

    邻居们都眼红了!隔壁程序员开发了一款智能插座,懒人福利


    4、选择您喜欢的面板,第一次开始调试也可以选择为开发调试面板,便于调试,后面也可以更换面板。

    5、进入 硬件开发 阶段,硬件开发步骤中模组选择 BT3L 蓝牙模组,固件选择蓝牙单点通用方案。

    6、在页面拉到最下面,下载开发资料。

    邻居们都眼红了!隔壁程序员开发了一款智能插座,懒人福利


    7、硬件测试。

    下载到 MCU 开发包后,使用开发包中的涂鸦模组调试助手,您可以使用助手模拟 MCU 模式,配合调试模组通讯板,验证模组是否通讯正常,同时也可以熟悉涂鸦串口协议提高对接效率。确定通信板正常可用的,可以跳过此步骤。若调试过程中对协议收发有疑问,也可以使用此助手协助查看正确数据交互格式。 使用步骤可参考 涂鸦模组调试助手。

    8、参考 MCU SDK开发包移植调试 进行移植调试。

    移植成功配网会看到选择的产品面板。

    邻居们都眼红了!隔壁程序员开发了一款智能插座,懒人福利


    第 4 步:功能板调试

    本章节中,您可以参考应用层示例代码实现 App 下发指令到模组,通过 MCU 控制插座开关,获取开关状态后,MCU 将状态传输给 App 展示。

    #include "bluetooth.h"#include <SoftwareSerial.h>SoftwareSerial mySerial(0, 1); // RX, TX#define _SS_MAX_RX_BUFF 300#define relay 10int 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编程,您就可以快速实现一款智能智能插座产品原型搭建。

    auth.tuya.com/?from=https%3A%2F%2Fiot.tuya.com%2F&_source=5da300e50745947aec50c44f209c5367

    隔壁邻居看了都眼红的产品,堪称“家电小助手”,有了它,家里的电器都掌握在你手中~ 快来试试吧~


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客