涂鸦三明治BLE SoC 主控板(BT3L) 使用记录

开发板购买

当然 肯定得先创 账号
官网商店:https://iot.tuya.com/purchase/store?page=1&tag=dev_board&q=
购买的 涂鸦三明治BLE SoC 主控板(BT3L)
相关资料可参考官方文档BT3L 模组规格书:https://developer.tuya.com/cn/docs/iot/br3l?id=K97rpns8f6xwh
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还需要实名认证(好吧)
在这里插入图片描述
付完钱后等货
在这里插入图片描述

到货后实物展示

在这里插入图片描述
在这里插入图片描述

环境搭建

参考官网文档:https://developer.tuya.com/cn/docs/iot/development-guide?id=Kaiuyncrmvf3z
在这里插入图片描述
Arduino IDE我本机就有;
在这里插入图片描述
STlink驱动 先装了再说;
IDE添加STM32开发板,GitHub下载很慢(折磨);
STM32CubeProgrammer(添加/bin 到环境变量)
在这里插入图片描述

烧录相关

串口传输驱动
在这里插入图片描述

Jlink驱动 (我没装)
涂鸦云模组烧录授权平台(需要账号登录 https://pms.tuya.com/login
在这里插入图片描述
在这里插入图片描述

IDE添加tuya SDK库

在这里插入图片描述

手机APP 添加 开发板 简单测试

1、安装 智能生活 和 涂鸦云测 APP

安装 涂鸦APP(智能生活)我这应用商店可以直接搜到。
在这里插入图片描述
生活 官方链接:https://smartapp.tuya.com/smartlife
在这里插入图片描述
云测 官网链接:https://smartapp.tuya.com/smartautoapp
在这里插入图片描述

2、开发板上电

涂鸦三明治蓝牙 SoC 主控板(BT3L) 的原理图

在这里插入图片描述
你可以用其他板子给开发板供电,如stm32(3.3V GND)
在这里插入图片描述
或者上 USB转TTL
在这里插入图片描述
我这是直接将开发板插在了 创客Arduino Uno Rev3上。
在这里插入图片描述
在这里插入图片描述

3、运行 APP,添加设备(可以扫到 但添加失败了 不确定是不是我个人原因)

点击右上角+,选择“添加设备”
在这里插入图片描述
开发板上电,出厂不知道烧了啥程序,我们添加上看看
在这里插入图片描述
在这里插入图片描述
添加失败
在这里插入图片描述
莫非出厂不是默认的配网模式,查看官方文档 Arduino 接入涂鸦快速入门BLE SoC 主控板(BT3L)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那我们按下 开发板上的按钮康康,点按没有反应,长按 LED2亮了,在添加依然失败,呃···
可能是因为我接着BT3L烧程序的缘故,不知道咋滴扫描不到了,哎。(其实就是处于已配网状态)
在这里插入图片描述
请添加图片描述

尝试问题调试(失败)

接上 USB转TTL 波特率9600,收到数据如下:
在这里插入图片描述
查看了官方提供的蓝牙mesh协议文档,恩 10s一次的心跳包。
在这里插入图片描述
十六进制发送 55 AA 00 01 00 00 00
在这里插入图片描述
返回F0 55 AA 00 03 00 01 02 0507 55 AA 00 03 00 01 02 05,多了个F0 07不知道啥情况,忽视,后面帧头55 AA 版本号 00 命令字03 返回03好吧,数据长度是 00 01 数据为02,CRC8为05,我们转到03命令看看
在这里插入图片描述
0x02是已绑定状态,这应该很能说明问题了,设备有蓝牙信号,但是无法被APP识别配网,因为已经配网了(这不是bug嘛 呀嘞呀嘞daze)。既然已经配网,那就删除mesh网络信息,恢复一下。
发送命令55 aa 00 04 00 00 03,还是返回F0 55 AA 00 03 00 01 02 05 呃,什么意思
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

重新烧录固件(慎用)

放弃,进行固件重新烧录。参考:无需Telink也能烧录涂鸦BT3L
具体步骤可参考下面的
开发板固件烧录
烧完后,重新上电,打开 APP 添加设备,扫到 插座了!(扫不到 就 长按sw1 5秒(看你固件设置))
在这里插入图片描述
终于添加成功了,可喜可贺。
在这里插入图片描述

简单功能演示

在这里插入图片描述

TL_C2 接个小灯,配合APP,做个演示
在这里插入图片描述
次日,我想稍微改下固件,亮个LED2看看,结果
在这里插入图片描述
在这里插入图片描述
啥,心跳包呢???
在这里插入图片描述
在这里插入图片描述

开发板固件烧录

参考文档:https://developer.tuya.com/cn/docs/iot/authorization-code-firmware-burning?id=K9br41pefnksv
根据文档准备前期工作,https://iot.tuya.com/pmg/devpanels

1、随便创建了个产品

https://iot.tuya.com/pmg/list
在这里插入图片描述
在这里插入图片描述

2、生成授权码

https://iot.tuya.com/pmg/devpanels
在这里插入图片描述
然后绑定刚才创建的产品(插座),授权码也有了
在这里插入图片描述

3、运行 云模组烧录授权平台

在这里插入图片描述
设置相关参数
在这里插入图片描述
在这里插入图片描述
上图勾选“固件下载”,会下载固件到本地文件夹。 C:\Users\用户名\AppData\Roaming\Tuya\TYDA\bin

4、使用USB转TTL 烧录固件(自行考虑是否这么使用吧)

注意:BT3L烧录据客服说需要泰凌微的烧录器。这卖200多,显然有些肉疼。
参考:无需Telink也能烧录涂鸦BT3L,配合安信可的烧录工具,加上USB转TTL也可以完成烧录(SWS 和 RX短接),然后在根据教程完成授权。(不得不说,安信可 yyds)
在这里插入图片描述
烧录固件 C:\Users\用户名\AppData\Roaming\Tuya\TYDA\bin这个目录下面(这个固件生成需要前面的 设置中 勾选“固件下载”)
在这里插入图片描述
设置为 只授权
在这里插入图片描述
然后选择串口 运行
在这里插入图片描述

Arduino 例程

打开 Arduino IDE,导入涂鸦SDK,“文件”-》“示例”-》涂鸦SDK里面有相关示例
在这里插入图片描述

ble_led 例程(测试没啥用)

源码

/*
 * @FileName: led.ino
 * @Author: Tuya
 * @Email: 
 * @LastEditors: Tuya
 * @Date: 2021-10-22 10:41:27
 * @LastEditTime: 2021-10-27 19:48:31
 * @Copyright: HANGZHOU TUYA INFORMATION TECHNOLOGY CO.,LTD
 * @Company: http://www.tuya.com
 * @Description: This demo is based on the Arduino UNO, and the LEDs on the UNO board are controlled by the Tuya Smart App. 
 *               Enter network connection mode when Pin7 to GND.
 * @Github:
 */

#include <TuyaBLE.h>
#include <SoftwareSerial.h>

TuyaBLE my_device;


/* Current LED status */
unsigned char led_state = 0;

/* Data point define */
#define DPID_SWITCH_LED 1


/* Stores all DPs and their types. PS: array[][0]:dpid, array[][1]:dp type. 
 *                                     dp type(TuyaDefs.h) : DP_TYPE_RAW, DP_TYPE_BOOL, DP_TYPE_VALUE, DP_TYPE_STRING, DP_TYPE_ENUM, DP_TYPE_BITMAP
*/
unsigned char dp_array[][2] =
{
    {DPID_SWITCH_LED, DP_TYPE_BOOL},
};

unsigned char pid[] = {"jxcevwfq"};
unsigned char mcu_ver[] = {"1.0.0"};

/* last time */
unsigned long last_time = 0;

void setup() 
{
  // Serial.begin(9600);
  Serial.begin(9600);

  //Initialize led port, turn off led.
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  //Enter the PID and MCU software version
  my_device.init(pid, mcu_ver);
  //incoming all DPs and their types array, DP numbers
  my_device.set_dp_cmd_total(dp_array, 1);
  //register DP download processing callback function
  my_device.dp_process_func_register(dp_process);
  //register upload all DP callback function
  my_device.dp_update_all_func_register(dp_update_all);

  last_time = millis();
}

void loop() 
{
  my_device.uart_service();

  /* LED blinks when network is being connected */
  if ((my_device.mcu_get_ble_work_state() != BLE_CONNECTED) && (my_device.mcu_get_ble_work_state() != BLE_SATE_UNKNOW)) {
    if (millis()- last_time >= 500) {
      last_time = millis();

      if (led_state == LOW) {
        led_state = HIGH;
      } else {
        led_state = LOW;
      }
      digitalWrite(LED_BUILTIN, led_state);
    }
  }
  
  delay(10);
}

/**
 * @description: DP download callback function.
 * @param {unsigned char} dpid
 * @param {const unsigned char} value
 * @param {unsigned short} length
 * @return {unsigned char}
 */
unsigned char dp_process(unsigned char dpid,const unsigned char value[], unsigned short length)
{
  switch(dpid) {
    case DPID_SWITCH_LED:
      led_state = my_device.mcu_get_dp_download_data(dpid, value, length); /* Get the value of the down DP command */
      if (led_state) {
        //Turn on
        digitalWrite(LED_BUILTIN, HIGH);
      } else {
        //Turn off
        digitalWrite(LED_BUILTIN, LOW);
      }
      //Status changes should be reported.
      my_device.mcu_dp_update(dpid, value, length);
    break;

    default:break;
  }
  return TY_SUCCESS;
}

/**
 * @description: Upload all DP status of the current device.
 * @param {*}
 * @return {*}
 */
void dp_update_all(void)
{
  my_device.mcu_dp_update(DPID_SWITCH_LED, led_state, 1);
}

编译烧录

拔掉 BT3L开发板!!!,给Uno3烧写了 ble_led
在这里插入图片描述
不过这个程序没写啥内容,模块配网一直失败,呃,没啥用呀 不要了。

拓展

涂鸦蓝牙mesh模块BT3L+步进电机+Arduino

实现手机控制 电机转动,带动小装置控制 模拟按压开关

效果图

在这里插入图片描述
在这里插入图片描述

源码

unsigned int forward[4] = {0x03,0x06,0x0c,0x09}; // 正转
unsigned int reverse[4]= {0x03,0x09,0x0c,0x06}; // 反转
int IO_array[4] = {8, 9, 10, 11};
int flag = 0;
int temp = 0;
int ble_in = 7;

void SetMotor(unsigned int InputData)
{
  if(InputData == 0x03)
  {
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
  }
  else if(InputData == 0x06)
  {
    digitalWrite(8, LOW);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);
  }
  else if(InputData == 0x09)
  {
    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, HIGH);
  }
  else if(InputData == 0x0c)
  {  
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
  }
  else if(InputData == 0x00)
  {
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
  }
}

/*
  功能:转1/64圈
  步距角5.625 360/5.625=64 减速比1/64
  故64*64个脉冲转一圈
  n 圈数
  _direction 方向 1正转 非1反转
  delay_ms delay_ms >= 2
*/
void motor_circle(int n, int _direction, int delay_ms)
{
  int i, j;
  for(i = 0; i < n * 8; i++)
  {
    for(j = 0; j < 4; j++)
    {
      if(1 == _direction)
      {
        SetMotor(0x00);
        SetMotor(forward[j]);
      }
      else
      {
        SetMotor(0x00);
        SetMotor(reverse[j]);
      }

      delay(delay_ms > 2 ? delay_ms : 2);
    }
  }
}

void setup() {
  // put your setup code here, to run once:
  int i = 0;
  for( i = 0 ; i < 4 ; i++ )
  {
    pinMode(IO_array[i], OUTPUT);
  }
  pinMode(ble_in,INPUT); //定义蓝牙控制信号脚为输入接口
}

void loop() {
  //    电机正转半圈
  //    motor_circle(32, 1, 2);
  //    电机反转半圈
  //    motor_circle(32, 0, 2);
  temp = digitalRead(ble_in);//读取数字7 口电平值赋给temp
  // temp和上一次的flag不同 则执行电机正反转
  if(temp != flag)
  {
    flag = temp;
    motor_circle(8, 1, 2);
    delay(500);
    motor_circle(8, 0, 2);
  }
  
  delay(1000);
}

版权声明:本文为CSDN博主「Love丶伊卡洛斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Ikaros_521/article/details/122036607

生成海报
点赞 0

Love丶伊卡洛斯

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

加载STM32MP1处理器的核心板在LoRa智能网关的应用

米尔MYC-YA15XC-T 核心板在LoRa智能网关的应用 在数字经济大发展的大背景下,近些年工业物联网实现跨越式发展,智能工业技术广泛应用于智能化生产领域,通过将感知技术、通信技术、传输技术、数据

Arduino与Proteus仿真实例-DHT11温度湿度传感器驱动仿真

DHT11温度湿度传感器驱动仿真 DHT11 是一款基本的超低成本数字温度和湿度传感器。 它使用电容式湿度传感器和热敏电阻来测量周围的空气,并在数据引脚上吐出数字信号(不需要模拟输入引脚)。 它使用起来相当简单,但需要仔细定时来抓取数据。

实验一 stm32F407VETx点亮流水灯

二、设计指标 使电路板上的8个LED轮流点亮,并按键控制点亮速度。 三、操作 1、CubeMX操作 1.1依据开发板LED引脚设置CubeMX中8个LED的引脚为GPIO_Output模式, 2、按键设置