一、项目介绍


1

项目介绍

台灯是日常使用频率最高的电器,将给大家介绍如何制作一款可以使用微信小程序进行远程控制的智能台灯。这款台灯操作简便,可以灵活调节亮度、色温,开发板上的OLED显示屏能够实时显示台灯的状态,同时预留了WS2812灯带接口,内置多种彩灯模式,可以做氛围灯使用。所有软硬件设计全部开源,动手能力强的小伙伴也可以在此基础上改造属于你自己的智能台灯。 2. 材料清单

以下是我制作智能台灯所需的材料清单,供大家参考: TencentOS_tiny_EVB_G0 开发板 x1 E53接口LED驱动模块 x1 (需要自己焊接,详细物料清单参见下方链接) 椴木板外壳一套 (需要根据图纸自己加工) 双色温LED灯管 x2 (文中同款搜索“Rohm led灯条”) 150 * 20 * 6 mm 散热器 x2 12V 1A 电源 x1 (保护环境,可以使用旧路由器、电视盒子等的电源,输出电压12V,输出电流为1A或更高) 鹅颈管 x1 鹅颈管配套铁夹 x1 鹅颈管配套螺母若干 UHU胶、电线、焊锡、电烙铁、镊子、扳手等其他材料与工具。 3项目链接

 二、硬件制作


1TOS_EVB_G0 开发板

TOS_EVB_G0 开发板是由腾讯TencentOS Tiny团队设计的一款物联网开发板,外观如下:

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil


* 主控芯片采用STM32G070RB,Flash空间为128KB、RAM空间为36KB; * 板载腾讯云定制固件版ESP8266 WIFI模组; * 板载E53传感器标准接口,方便连接各种E53传感器; * 板载128*32 OLED显示屏幕; * 板载8MB SPI Flash,可用于固件升级; * 板载CH340转串口连接,可以使用一根USB线连接至电脑,查看串口日志。 下面是每部分详细的说明:  开发板硬件电路详解   (1) 最小系统电路   最小系统部分由电源电路、时钟电路、Boot电路、复位电路、下载电路组成: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_02


            (2) Wi-Fi电路   Wi-Fi部分包括ESP8266 Wi-Fi模组供电电路、串口通信电路:   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_03


(3) E53扩展接口电路   E53扩展接口供外部传感器连接,包括:一个串口、一个SPI接口、一个IIC接口、四个普通GPIO口、一个ADC模拟采集接口,一个DAC模拟输出接口,如图: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_04


(4) USB转串口电路   USB转串口电路将串口信息转换为USB口信号,使得开发板可以直接通过USB线连接至PC,在PC上使用串口助手查看日志: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_05


(5) OLED显示屏幕电路   OLED屏幕部分包括OLED供电部分和通信部分:   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_06


(6) 连接Micro USB线  

ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_07


(7) 连接ST-Link下载器    开发板3v3---> STlink 3.3V   开发板DIO---> STlink SWDIO   开发板CLK---> STlink SWCLK   开发板GND---> STlink GND   请大家参考下图进行连接,千万不要接反接错,以免烧掉MCU。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_08

2. 台灯外壳及结构

首先需要购买鹅颈管、铁架、螺母等零件,规格如下: 鹅颈管建议选用40-60cm长,空心偏硬的鹅颈管,注意鹅颈管的内径不要太小,否则电线难以穿过;铁夹子选购时注意开孔的形状,最好使用扁孔,这样方便固定鹅颈管,保证不会旋转;当然还要记得买配套的螺母;灯管用704硅橡胶居中粘在散热器上,胶水一定不要挤得太多,胶水干透后焊接双色LED灯管。 下一步准备台灯外壳: 图纸在源码的 doc 文件夹内,店家一般都是在一整块木板上进行切割,不论实际切割的大小都按整张板收费,因此建议在一张图纸内多切割几个外壳,充分利用这块木板,减少浪费。如下图所示,这里在一块木板上切了4套台灯外壳和其他几个外壳:

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_09


实测单灯管照明有点暗,强烈建议用两个灯管,下图中标注的单灯管零件就不要使用了,B1和B2、G1和G2、H1和H2完全一样,F1和F2的区别在于开孔的直径不一样,一个是8mm,另一个是10mm,如果买不到同规格的鹅颈管方便替换使用。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_串口_10


最后组装完成是这样的,供大家参考,安装时一定注意先后顺序,提前把线、螺母穿好,避免返工。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_串口_11


上图有一个细节,我的外壳边缘比中间的零件大概高出2mm,预留用于安装透明外壳。如果买了什么东西的包装盒是塑料磨砂材质,可以裁剪一块合适大小盖在灯管外壳上,这样光线会柔和一点,不至于太刺眼。实在没有可以不装,如果不差钱也可以按尺寸找商家切割一块2mm厚的雾面亚克力。 注意事项: 不同商家的木板厚度有一定误差,切割机也有一定误差,请提前沟通,误差一般在0.1-0.2mm左右,可能需要在图纸中进行补偿。 3. E53接口LED驱动模块

请根据原理图内物料清单采购元件并焊接,模块焊接完成如图: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_12

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_13


请按下图所示与开发板进行组装:

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_14


注意事项: 1. 板子上预留WS2812灯带的接口,没有灯带或不需要灯带可以不焊。 2. 不使用灯带或WS2812灯珠数量少于5个,建议采用线性稳压方案;超过5个建议采用开关稳压方案。 3. 板子上有两路PT4115驱动,如果使用双色灯管,左边一路接黄色,右边一路接白色。如果使用单色灯管,建议只接右边一路,并把色温调整到6500K,这样使用的缺点就是浪费了一路驱动,想要驱动两路白光LED,请自行修改的代码,删除调整色温的相关内容。 4. 灯管的功率计额定电压决定了PT4115的采样电阻,目前用的是两根双色温灯管,单根灯管额定电压6V,单色额定电流300mA,这里是两根灯管的黄色与黄色并联、白色与白色并联,单色温的总额定电流为600mA,根据PT4115手册计算出0.2ohm采样电阻输出电流为500mA,因此串联两个0.1ohm的采样电阻。如果使用其他规格的灯管请自行计算采样电阻阻值。 5. 旋转编码器旁边有一个排阻,为IO口上拉,如果单片机支持上拉可以不焊。   6. P2、P3、R3、R4为预留测试焊盘,不需要焊接。 7. 设计输入电压为12V,如需驱动更高电压、更大功率的LED灯管,请注意元件耐压,可能需要更换更高耐压的元件。 

三、软件开发


1. 开发板软件环境准备

1.1 MDK软件介绍 MDK 即RealView MDK 或MDK-ARM(Microcontroller Development kit),是 ARM 公司收购Keil公司以后,基于uVision界面推出的针对ARM7、ARM9、Cortex-M0、Cortex-M1、Cortex-M2、Cortex-M3、Cortex-R4等ARM处理器的嵌入式软件开发工具。MDK-ARM 集成了业内最领先的技术,包括 uVision4 集成开发环境与 RealView 编译器RVCT。支持 ARM7、ARM9 和最新的Cortex-M3/M1/M0 核处理器,自动配置启动代码,集成 Flash 烧写模块,强大的 Simulation 设备模拟,性能分析等功能,与 ARM 之前的工具包 ADS 等相比,RealView 编译器的最新版本可将性能改善超过 20%。 Keil公司开发的ARM开发工具MDK,是用来开发基于ARM核的系列微控制器的嵌入式应用程序。它适合不同层次的开发者使用,包括专业的应用程序开发工程师和嵌入式软件开发的入门者。MDK包含了工业标准的Keil C编译器、宏汇编器、调试器、实时内核等组件,支持所有基于ARM的设备,能帮助工程师按照计划完成项目。  1.2 MDK安装 登录MDK官网,下载MDK5软件,下载地址: http://www2.keil.com/mdk5 或者 https://www.keil.com/download/product/   下载的版本最好在5.24以上,本开发教程以5.24版本为例,双击MDK524应用程序文件,点击 next 。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_15


打上" I agree "前面的勾勾,即是同意一些安装协议。点击 next 。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_16


选择安装路径,可以默认也可以安装在我们自己建立的文件夹下。点击 next 。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_17


这里填写的是我们的一些信息,填写完整后,继续 next 。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_18


然后等待安装完成即可。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_19


安装完成,点击 Finish 。   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_20


然后会跳出来这个界面,这个我们后面再讲,先点 OK ,把弹框都叉掉。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_21


激活MDK,导入License,激活MDK后便可使用了。   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_串口_22

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_23


特别提示 :一定要输入License激活MDK软件,建议购买正版License。  1.3 MDK安装 安装完MDK后,我们需要安装开发套件中单片机型号对应的Pack。  安装方式一 :登录官网:http://www.keil.com/dd2/pack/ 下载Keil.STM32G0xx_DFP.x.x.x.pack 后安装。  安装方式二 :MDK软件上在线安装。   打开软件,在导航栏打开 Pack 安装界面,然后选择 ok 选项。   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_24

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_25


进入在线安装界面,选着STM32G0XX Pack,点击 Install 进行安装。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_26


到这里,我们开发板的单片机程序开发环境已经搭建完毕,重启MDK软件就可以使用了。  1.4 ST-Link驱动安装 前面讲了开发板单片机程序的开发环境的搭建,但是为了将程序烧录到开发板中我们还需要使用仿真器。我们这套开发板选用ST公司的ST-Link V2仿真器进行开发板程序的烧写和仿真,下面介绍ST-Link驱动的安装及环境搭建。 在ST官网下载ST-Link驱动, https://www.st.com/content/st_com/zh/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-link009.html (驱动有2种:32位电脑系统安装“dpinst_x86”、64位电脑系统安装“dpinst_amd64”)。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_27


运行对应的驱动,安装ST-Link V2驱动程序。安装路径尽量保持默认路径。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_28


安装完成后, 将ST-Link通过USB接口连入电脑。打开“设备管理器”。若看到如下图所示,表示驱动安装成功。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_29


有两点值得注意: 1. 各种 Windows 版本设备名称和所在设备管理器栏目可能不一样,例如 Win10 插上ST-Link 后显示的是 STM32 ST-Link。  2. 如果设备名称旁边显示的是黄色的叹号,请直接点击设备名称,然后在弹出的界面点击更新设备驱动 至此, ST-Link 驱动已经安装完成。 接下来大家只需要在 MDK工程里面配置一下 ST-Link即可。  1.5 CH340串口驱动安装 互联网搜索下载CH340 串口芯片的驱动,安装方法:打开驱动安装程序点击安装即可。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_串口_30

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_31


注 :若安装失败,请先点击卸载,后点击安装。  1.6 串口调试助手的安装与使用 工具下载:http://www.daxia.com/download/sscom.rar 安装方法:串口调试助手sscom5.13.1是免安装的,解压出压缩包即可直接使用。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_32


根据PC和终端之间的连接,选择正确的串行端口。 打开电脑的设备管理器,在端口列表可以看到PC与开发板连接的端口号。   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_23


我这里显示的是COM26,所以要在sscom工具中选择COM26,开发板程序波特率设置为115200,所以我在sscom串口工具中选择115200波特率。 2. ESP8266烧写腾讯云定制固件

2.1 下载固件 腾讯云IoT AT指令是一套针对使用通讯模组(2G/4G/NB/Wi-Fi)接入腾讯云物联平台的定制AT指令集,如果通讯模组实现了该指令集,则设备接入和通讯更为简单,所需代码量更少。ESP8266作为IoT领域使用最广泛的一款Wi-Fi芯片/模组,腾讯云在其通用AT指令基础上,增加了腾讯云IoT AT指令集,形成一个定制的模组固件QCloud_IoT_AT_ESP8266。 下载链接: https://github.com/tencentyun/qcloud-iot-esp-wifi  

使用git下载的命令如下:  git clone https://github.com/tencentyun/qcloud-iot-esp-wifi.git 下载之后即可在图中圈出的文件夹中看到定制固件: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_34


2.2 下载烧写工具 使用乐鑫官方下载工具ESPFlashDownloadTool,下载链接如下:  https://www.espressif.com/zh-hans/support/download/other-tools

点击下载Flash 下载工具(ESP8266 & ESP32 & ESP32-S2): 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_35


下载之后解压即可。  2.3 固件说明 腾讯云IoT定制的AT模组固件QCloud_IoT_AT_ESP8266,适用于所有FLASH大小为2MB或者2MB以上的ESP8266模组。  AT串口使用UART0,默认的Tx为GPIO1,Rx为GPIO3。但因为ESP8266的UART0 默认会在上电启动期间输出一些打印,如果打印信息影响设备功能,可在上电期间将 U0TXD(GPIO1)、U0RXD(GPIO3) 分别与 U0RTS (GPIO15),U0CTS(GPIO13)进行交换,以屏蔽打印。因此提供两个版本的固件:  * 名称包含UART_1_3的固件串口使用的Tx为GPIO1,Rx为GPIO3。  * 名称包含UART_15_13的固件串口使用的Tx为GPIO15,Rx为GPIO13。  进入QCloud_IoT_AT_ESP8266_FW,本文中我们使用第一个固件: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_36


2.4 烧写固件 切换Boot选择端子和串口选择端子。 (1)将开发板上的ESP8266启动引脚配置端子切换到低电平;  (2)将开发板上的串口选择端子置于中间,使ESP8266直接与PC串口连接:  方法参考下图:  

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_37


运行Flash烧写工具,双击 工具 ,运行: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_38


选择开发者模式: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_39


选择ESP8266下载工具: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_40


开始下载,按照图中进行操作: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_41


点击 下载 之后,按下开发板上的复位键,Flash下载工具开始下载: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_42


若没有显示,请检查接线端子是否连接正确。  下载完成之后如图:   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_43


关闭工具,将Boot选择引脚拔下,将串口选择端子恢复默认。  注 意: 完成固件下载后,一定切记将跳线端子恢复到默认状态,默认端子怎么短接可以参考前面完整的组装成品图,否则Wi-Fi将没法工作,MCU也没法控制Wi-Fi。  3. 工程代码修改与使用

下载TencentOS代码 https://github.com/Tencent/TencentOS-tiny.git   下载本工程代码 https://gitee.com/dma/iot_led.git   把本工程代码放在  TencentOS-tiny\board\TencentOS_tiny_EVB_G0\KEIL

下   本工程使用的是AT SDK,已经集成在工程下,因为部分功能的需要,我在官方SDK的基础上做了一些修改及适配,源码在这里 https://github.com/tencentyun/qcloud-iot-sdk-tencent-at-based   如需移植其他OS或开发板请参阅官方文档自行修改。  在腾讯物联网开发平台创建设备,具体步骤参见 https://cloud.tencent.com/document/product/1081/34738   产品定义,新建项目,新建产品,按如下配置: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_44


数据模板,选择“ 导入json ”,json文件路径 `iot_led\user_code\智能灯.json`,你也可以添加自己的功能,或在此基础上进行二次开发。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_45

没有修改json的话可以略过这一步,进行之后的交互开发,如果你之前在数据模板中添加了自己的功能或有其他修改,请点击“查看json”并下载json代码。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_46

将导出的json放在iot_led\qcloud-iot-sdk-tencent-at-based\tools

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_47

cmd窗口运行python codegen.py -c 智能灯.json,重新生成数据模板代码,如果提示出错,请检查编码是否为GBK。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_48

将生成几个c文件放入 iot_led\qcloud-iot-sdk-tencent-at-based\usr_logic

ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_49

打开iot_led\qcloud-iot-sdk-tencent-at-based\usr_logic\data_template_usr_logic.c,在 deal_down_stream_user_logic中开发你自己的功能。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_50


交互开发,面板配置这里按自己的需求摆放各个组件、设置图标等,点击左边的箭头可以设置图标顺序,样式和图标可以按自己的喜好进行更改,也可以照搬这个设计。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_51


设备调试,设备端代码编译并下载后你可以在这里在线调试。 打开 iot_led\user_code\user_config.h


ESP32 DAC输出到扬声器的电路 esp32 输出电流_ESP32 DAC输出到扬声器的电路_52


找到你刚刚创建的设备,填入设备密钥、产品ID、设备名。

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_53


填入你家的Wi-Fi名和密码 (如果作为一个真正商用的产品,应该通过配网或其他方式来获取Wi-Fi信息,不应该在代码中写Wi-Fi名和密码,因为你不可能知道用户家的Wi-Fi,目前配网功能有,但还不完善,就先这样用吧)。   

打开TencentOS-tiny\board\TencentOS_tiny_EVB_G0\BSP\Inc\stm32g0xx_hal_conf.h打开这处宏 

/* #define HAL_TIM_MODULE_ENABLED   */

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_54

打开TencentOS-tiny\board\TencentOS_tiny_EVB_G0\TOS_CONFIG\tos_config.h

修改#define TOS_CFG_TASK_DYNAMIC_CREATE_EN  0u#define TOS_CFG_TASK_DYNAMIC_CREATE_EN  0u

由于启用了动态创建任务,任务栈会从对内存申请,所以系统堆内存适当改大一点,避免溢出#define TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE        0x2000 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_55

最好结合自己的代码,在系统完全运行起来以后使用k_err_t tos_mmheap_check(k_mmheap_info_t *info);查看内存使用情况,适当修改对内存的大小。如果出现莫名其妙的死机、重启等问题,大概率是内存不足溢出了。  

打开

TencentOS-tiny\board\TencentOS_tiny_EVB_G0\BSP\Src\stm32g0xx_it_module.c

添加头文件#include "ringbuff.h"

添加extern sRingbuff g_ring_buff;

ESP32 DAC输出到扬声器的电路 esp32 输出电流_串口_56

同样在这个代码中找到HAL_UART_RxCpltCallback函数,去掉tos_at_uart_input_byte(data);,添加ring_buff_push_data(&g_ring_buff, &data, 1);

ESP32 DAC输出到扬声器的电路 esp32 输出电流_开发板_57


编译下载运行   点击进入工程配置界面按纽,进入工程配置界面: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_58


选择 Debug 选项,进入仿真器设置界面。   

ESP32 DAC输出到扬声器的电路 esp32 输出电流_串口_59


下拉仿真器选择列表,选着ST-Link Debugger并勾选右侧 Use ,点击 Settings 进入ST-Link V2仿真器配置界面。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_60


开发板设计的程序烧录方式为SW,此处Unit选择ST-Link/V2,且Port选择SW,并确认右侧框内是否检测出SW设备,点击 确认 保存配置。 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_流水灯程序 keil_61


点击 确定 之后,回到主界面,点击 下载 按钮: 

ESP32 DAC输出到扬声器的电路 esp32 输出电流_固件_62