单片机AT指令对接TB02天猫精灵蓝牙灯控的简单使用

前言

大家好,今天我又给大家带来点东西,灯控设备的一些技术分享。一些朋友应该了解到了市面上有一种天猫精灵控制的蓝牙灯,这个灯的话是蓝牙mesh的,我们可以语音控制他的亮灭和灯的亮度等,所以这篇文章就是来介绍和教会大家来开发制作一个自己的灯控设备,过程也非常简单。

原理分析

关于控制以及数据传输的原理的话我用下面的这张图来表示。
在这里插入图片描述

准备工作

  • 安信可TB02 模块或者开发板
  • 安信可NRF24L01开发板
  • 天猫精灵
  • 3元组参数

环境搭建(一)

此环境主要用来对TB02进行代码编写以及三元组的烧录。

获取TC32编译工具链(文档仅适用于Linux)

目前仅测试了linux及Mac OS系统,Windows系统仅提供了编译工具链,需自行设置环境变量

  • Mac OS版本获取编译工具链 git clone https://github.com/flyskywhy/tc32 -b macos
  • Windows 版本工具链下载地址
    https://shyboy.oss-cn-shenzhen.aliyuncs.com/readonly/tc32-win.rar
    linux版本获取编译工具链
wget https://shyboy.oss-cn-shenzhen.aliyuncs.com/readonly/tc32_gcc_v2.0.tar.bz2

解压到opt文件夹 (也可解压到其他文件夹)

sudo tar -xvjf tc32_gcc_v2.0.tar.bz2 -C /opt/

添加工具链到环境变量(以解压到/opt为例)

export PATH=$PATH:/opt/tc32/bin

测试是否搭建成功

tc32-elf-gcc -v

如果搭建成功将打印如下信息:

Using built-in specs.
COLLECT_GCC=tc32-elf-gcc
COLLECT_LTO_WRAPPER=/opt/tc32/lib/gcc/tc32-elf/4.5.1.tc32-elf-1.5/lto-wrapper
Target: tc32-elf
Configured with: ../../gcc-4.5.1/configure --program-prefix=tc32-elf- --target=tc32-elf --prefix=/opt/tc32 --enable-languages=c --libexecdir=/opt/tc32/lib --with-gnu-as --with-gnu-ld --without-headers --disable-decimal-float --disable-nls --disable-mathvec --with-pkgversion='Telink TC32 version 2.0 build' --without-docdir --without-fp --without-tls --disable-shared --disable-threads --disable-libffi --disable-libquadmath --disable-libstdcxx-pch --disable-libmudflap --disable-libgomp --disable-libssp -v --without-docdir --enable-soft-float --with-newlib --with-gcc --with-gnu- --with-gmp=/opt/tc32/addontools --with-mpc=/opt/tc32/addontools --with-mpfr=/opt/tc32/addontools
Thread model: single
gcc version 4.5.1.tc32-elf-1.5 (Telink TC32 version 2.0 build) 

获取SDK

git clone https://github.com/Ai-Thinker-Open/Telink_SIG_Mesh.git

编译

进入examples/8258_mesh工程目录

cd Telink_SIG_Mesh/examples/8258_mesh

执行下列编译指令:

make all

输出类似如下信息说明编译成功:

Invoking: Print Size
tc32-elf-size -t / ... /Telink_SIG_Mesh/examples/8258_mesh/out/8258_mesh.elf
text    data     bss     dec     hex filename
134720    2724   14160  151604   25034 / ... /Telink_SIG_Mesh/examples/8258_mesh/out/8258_mesh.elf
134720    2724   14160  151604   25034 (TOTALS)
Finished building: sizedummy

烧录程序到芯片

安信可自主开发了串口烧录工具,无需官方烧录器即可使用,前提是要先将安信可bootloader烧录到模块中。

串口烧录接线方式如下(安信可TB-02模块):

串口模块
VCC3V3
GNDGND
TXRX
RTSRST
DTRPA1

注意:PA1为boot选择引脚,为低电平进入下载模式,为高电平进入运行模式

烧录指令:

make flash

其他指令:

make erase_fw //擦除固件
make erase_key //擦除Mesh相关数据
make monitor //打开串口监控
python3 ../../make/Telink_Tools.py -p /dev/ttyUSB0 burn_triad 1345 78da07fa44a7 221746e805ac0e6269bd4d3e55f1145c //烧录三元组参数

环境搭建(二)

这个环境主要是NRF24L01的编写环境,用keill或者其他的MCU平台都可以,主要实现的功能就是接收从TB02的串口出来的数据,识别成PWM的脉冲宽度调节输出,从而控制灯的亮度调节

如下是MCU与TB02交互的AT指令:

指令功能备注
AT测试AT
AT+GMR查询版本号
AT+RST复位模块
AT+RESTORE恢复出厂设置
AT+STATE查询配网状态
AT+SLEEP深度睡眠暂未实现
AT+NETNAME查询NetKey
AT+PASWORD查询AppKey
AT+ADDR查询模块地址
AT+SEND
+DATA:收到数据

STC 15W408AS 芯片串口接收


//串口接收函数
bit ReceiveString()    
{
    char * RecStr=buf_string;
    char num=0;
    unsigned char count=0;
    loop:    
    *RecStr=SBUF;
    count=0;
    RI=0;    
    if(num<14)  //数据包长度为15个字符,尝试连续接收15个字符
    {
        num++;
        RecStr++;    
        while(!RI)
        {
            count++;
            if(count>130)return 0;    //接收数据等待延迟
        }
        goto loop;
    }
    return 1;
}

STC 15W408AS 芯片串口发送

    while(1)
	{
		SendString("AT+GMR");//查询版本号
		Int_To_String(TX_BUF,length);
		SendString("\r\n");
		delay_ms(1000);	
	}

STC 15W408AS 芯片PWM调节输出

while(1)
   {
     do{
            if(PWM!=0xff)
           {PWM++ ;delayms(10);}
           else Beep() ; 
         }
     while(K1==0);
     do{
           if(PWM!=0x02)
          {PWM-- ;delayms(10);}
           else Beep() ; 
          }
     while(K2==0);
   }
}

小结

好了,关于天猫精灵控制TB02蓝牙模块利用外接MCU控制灯原理以及快速对接流程就是这样,理解通了原理其实并不难,而且对于应用层的开发的话就都是通过串口输入做判断然后输出到灯上,相对于传统的蓝牙模块直接控制灯,增加了一步需要MCU控制的流程,使其更加灵活。

源码地址

编译环境
AT源工程地址