该工程是基于esp32C3使用IDF v5.2开发的一个物联开关灯模块。 使用esp32c3联网后对接巴法云MQTT服务器再对接天猫精灵。 通过巴法云mqtt通信控制一个mg90s的舵机来转动对应角度来替代手指去开灯或者关灯。 可以和天猫精灵联动,对天猫精灵说“天猫精灵 开灯/关灯”来控制舵机开关灯。
首先准备硬件如下:
组装图如下
首先需要下载vscode
然后安装vscode,注意需要勾选这几个框方便打开文件夹工程。
可以下载中文插件再重新打开就是中文页面
在vsdode中下载idf插件
在vscode左侧乐鑫图标打开idf
选择安装idf开发环境
选择乐鑫服务器
选择版本V5.2
不同电脑环境不一样,有可能会出现idf安装失败的情况
那就只能按报错信息去百度查找原因
然后需要先删除原本的idf下载目录的东西,卸载插件重新安装,如果还是不行那就安装旧版本或者另一个版本
安装成功后可以选择工程文件夹打开工程
注册巴法云
参考:
巴法云MQTT设备云对接: https://cloud.bemfa.com/docs/#/?id=_43-mqtt设备云
巴法云参考天猫精灵对接: https://cloud.bemfa.com/docs/#/?id=p-stylefont-weight700margin0px9、天猫精灵支持
选择MQtt设备云创建主题 roomLight002 appSend appReceive
打开mqtt_app.c 复制私钥到 .credentials.client_id
mqtt_app_t mqtt_bemfa=
{
.mqtt_cfg = {
.broker.address.uri = "mqtt://bemfa.com:9501/",
.credentials.client_id = "私钥",
.network.disable_auto_reconnect = true,
},
.event_handler=mqtt_event_handler,
.topics={"roomLight002","appSend","appReceive"},
.state=mqtt_state_stop
};
打开wifi_connect_default.c
填写家里或手机的wifi热点名称和密码
#define CONFIG_EXAMPLE_WIFI_SSID "2.4G wifi名称"
#define CONFIG_EXAMPLE_WIFI_PASSWORD "wifi密码"
mg90s舵机默认是90度,安装塑料的转子在90度时贴合到灯的开关侧边
默认开灯是先转动到90度300ms后转到45度500ms后转动回90度
默认关闭是先转动到90度300ms后转到135度500ms后转动回90度
如果这个控制逻辑和你实际安装到灯的开关不一样时需自行修改
打开 mg90s.c
修改 mg90s_180_switch_room_light函数
/**
* @brief 功能介绍:设置舵机转动实现开关灯
* @param 参数:mg90s
* @param 参数:is_on
*/
void mg90s_180_switch_room_light(mg90s_180_t* mg90s ,uint8_t is_on)
{
if(is_on)
{
ESP_LOGI(TAG, "room_light_on");
mg90s_180_set_mode(mg90s,mg90s_angle_90);
vTaskDelay(pdMS_TO_TICKS(300));
mg90s_180_set_mode(mg90s,mg90s_angle_45);
vTaskDelay(pdMS_TO_TICKS(500));
mg90s_180_set_mode(mg90s,mg90s_angle_90);
}else
{
ESP_LOGI(TAG, "room_light_off");
mg90s_180_set_mode(mg90s,mg90s_angle_90);
vTaskDelay(pdMS_TO_TICKS(300));
mg90s_180_set_mode(mg90s,mg90s_angle_135);
vTaskDelay(pdMS_TO_TICKS(500));
mg90s_180_set_mode(mg90s,mg90s_angle_90);
}
}
尝试编译
然后串口下载到开发板
把开发板的 IO5 5V GND
和舵机的线接上
IO5-->橙色线
5V-->红线
GND-->棕线
打开串口监控:
以下为正确运行的日志
I (26) boot: ESP-IDF v5.2 2nd stage bootloader
I (26) boot: compile time Mar 8 2024 18:13:36
I (26) boot: chip revision: v0.3
I (29) boot.esp32c3: SPI Speed : 80MHz
I (33) boot.esp32c3: SPI Mode : DIO
I (38) boot.esp32c3: SPI Flash Size : 2MB
I (43) boot: Enabling RNG early entropy source...
I (48) boot: Partition Table:
I (52) boot: ## Label Usage Type ST Offset
Length
I (59) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (67) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (74) boot: 2 factory factory app 00 00 00010000 00100000
I (81) boot: End of partition table
I (86) esp_image: segment 0: paddr=00010020 vaddr=3c0b0020 size=264d0h (156880) map
I (119) esp_image: segment 1: paddr=000364f8 vaddr=3fc91400 size=02d08h ( 11528) load
I (121) esp_image: segment 2: paddr=00039208 vaddr=40380000 size=06e10h ( 28176) load
I (130) esp_image: segment 3: paddr=00040020 vaddr=42000020 size=ad1dch (709084) map
I (244) esp_image: segment 4: paddr=000ed204 vaddr=40386e10 size=0a3fch ( 41980) load
I (257) boot: Loaded app from partition at offset 0x10000
I (257) boot: Disabling RNG early entropy source...
I (269) cpu_start: Unicore app
I (277) cpu_start: Pro cpu start user code
I (277) cpu_start: cpu freq: 160000000 Hz
I (278) cpu_start: Application information:
I (280) cpu_start: Project name: mqtt_tcp
I (286) cpu_start: App version: 4ab17e1-dirty
I (291) cpu_start: Compile time: Mar 8 2024 18:11:38
I (297) cpu_start: ELF file SHA256: aaf448587...
I (302) cpu_start: ESP-IDF: v5.2
I (307) cpu_start: Min chip rev: v0.3
I (312) cpu_start: Max chip rev: v1.99
I (317) cpu_start: Chip rev: v0.3
I (321) heap_init: Initializing. RAM available for dynamic allocation:
I (329) heap_init: At 3FC988B0 len 00027750 (157 KiB): RAM
I (335) heap_init: At 3FCC0000 len 0001C710 (113 KiB): Retention RAM
I (342) heap_init: At 3FCDC710 len 00002950 (10 KiB): Retention
RAM
I (349) heap_init: At 50000010 len 00001FD8 (7 KiB): RTCRAM
I (356) spi_flash: detected chip: generic
I (360) spi_flash: flash io: dio
W (364) spi_flash: Detected size(4096k) larger than the size in
the binary image header(2048k). Using the size in the binary image header.
I (377) sleep: Configure to isolate all GPIO pins in sleep stateI (383) sleep: Enable automatic switching of GPIO sleep configuration
I (391) main_task: Started on CPU0
I (391) main_task: Calling app_main()
I (391) app_main: [APP] Startup..
I (401) app_main: [APP] Free memory: 280448 bytes
I (401) app_main: [APP] IDF version: v5.2
I (421) wifi_connect_deault: Start example_connect.
I (421) pp: pp rom version: 9387209
I (421) net80211: net80211 rom version: 9387209
I (431) wifi:wifi driver task: 3fca1e8c, prio:23, stack:6656, core=0
I (431) wifi:wifi firmware version: cc1dd81
I (431) wifi:wifi certification version: v7.0
I (441) wifi:config NVS flash: enabled
I (441) wifi:config nano formating: disabled
I (441) wifi:Init data frame dynamic rx buffer num: 32
I (451) wifi:Init static rx mgmt buffer num: 5
I (451) wifi:Init management short buffer num: 32
I (461) wifi:Init dynamic tx buffer num: 32
I (461) wifi:Init static tx FG buffer num: 2
I (471) wifi:Init static rx buffer size: 1600
I (471) wifi:Init static rx buffer num: 10
I (471) wifi:Init dynamic rx buffer num: 32
I (481) wifi_init: rx ba win: 6
I (481) wifi_init: tcpip mbox: 32
I (481) wifi_init: udp mbox: 6
I (491) wifi_init: tcp mbox: 6
I (491) wifi_init: tcp tx win: 5760
I (501) wifi_init: tcp rx win: 5760
I (501) wifi_init: tcp mss: 1440
I (501) wifi_init: WiFi IRAM OP enabled
I (511) wifi_init: WiFi RX IRAM OP enabled
I (511) phy_init: phy_version 1130,b4e4b80,Sep 5 2023,11:09:30
I (551) wifi:mode : sta (60:55:f9:79:cb:98)
I (551) wifi:enable tsf
I (561) wifi_connect_deault: Connecting to TP-LINK_xwj...
I (561) wifi_connect_deault: Waiting for IP(s)
I (1171) wifi:new:<6,2>, old:<1,0>, ap:<255,255>, sta:<6,2>, prof:1
I (1471) wifi:state: init -> auth (b0)
I (1471) wifi:state: auth -> assoc (0)
I (1511) wifi:state: assoc -> run (10)
I (1821) wifi:<ba-add>idx:0 (ifx:0, a4:1a:3a:65:48:f6), tid:0, ssn:2706, winSize:64
I (1821) wifi:connected with TP-LINK_xwj, aid = 2, channel 6, 40D, bssid = a4:1a:3a:65:48:f6
I (1821) wifi:security: WPA2-PSK, phy: bgn, rssi: -40
I (1831) wifi:pm start, type: 1
I (1831) wifi:dp: 1, bi: 102400, li: 3, scale listen interval from 307200 us to 307200 us
I (1841) wifi:set rx beacon pti, rx_bcn_pti: 0, bcn_timeout: 25000, mt_pti: 0, mt_time: 10000
I (1851) wifi_connect_deault: ESP_WIFI_CONNECT!
I (1851) wifi:AP's beacon interval = 102400 us, DTIM period = 1
W (1961) wifi:[ADDBA]rx delba, code:39, delete tid:0
I (1961) wifi:<ba-del>idx:0, tid:0
W (1961) wifi:[ADDBA]rx delba, code:39, delete tid:0
I (2851) esp_netif_handlers: example_netif_sta ip: 192.168.1.100, mask: 255.255.255.0, gw: 192.168.1.1
I (2851) wifi_connect_deault: Got IPv4 event: Interface "example_netif_sta" address: 192.168.1.100
I (2861) mqtt_example: mqtt start!
I (2861) wifi_connect_deault: ESP_MQTT_start!
I (2861) mqtt_example: Other event id:7
I (3411) wifi_connect_deault: Got IPv6 event: Interface "example_netif_sta" address: fe80:0000:0000:0000:6255:f9ff:fe79:cb98,
type: ESP_IP6_ADDR_IS_LINK_LOCAL
I (3411) main_task: Returned from app_main()
I (5151) mqtt_example: MQTT_EVENT_CONNECTED
I (5151) mqtt_example: sent subscribe successful, msg_id=62532
I (5151) mqtt_example: sent subscribe successful, msg_id=61793
I (5161) mqtt_example: sent subscribe successful, msg_id=18018
I (5171) mqtt_example: MQTT_EVENT_SUBSCRIBED, msg_id=62532
I (5171) mqtt_example: sent publish successful, msg_id=0
I (5201) mqtt_example: MQTT_EVENT_SUBSCRIBED, msg_id=61793
I (5201) mqtt_example: sent publish successful, msg_id=0
I (5201) mqtt_example: MQTT_EVENT_SUBSCRIBED, msg_id=18018
I (5201) mqtt_example: sent publish successful, msg_id=0
可以在巴法云服务器管理界面对应主题直接发送"on"
向对应的巴法云mqtt服务器的主题例如roomLight002打开灯时的日志
I (155151) mqtt_example: MQTT_EVENT_DATA
TOPIC=roomLight002
DATA=on
I (155151) mg90s: room_light_on
收到打开指令后,esp32c3开发板会控制舵机转动到45度或者135度后再回到90度。
可以在巴法云服务器管理界面对应主题直接发送"off"
向对应的巴法云mqtt服务器的主题关闭灯时的日志
TOPIC=roomLight002
DATA=off
I (194781) mg90s: room_light_off
收到关闭指令后,esp32c3开发板会控制舵机转动到135度或者45度后再回到90度。
当测试舵机能正确转动 再使用胶水或者其他固定方法让舵机贴合在开关侧边
如果需要接入天猫精灵语音控制 请在天猫精灵app搜索巴法云
然后按巴法云物联平台的帮助教程操作 绑定自己的巴法云账号
绑定完成后可以在天猫精灵app进行智能灯的控制
如果有天猫精灵已经联网
可以直接对天猫精灵说“天猫精灵 开灯”或者“天猫精灵关灯”
天猫精灵会自动向绑定好的巴法云的主题推送“on”和“off"
最终实现语音控制舵机转动来按下灯的开关。
如果舵机开灯或关灯完成后转回90度后还在持续嗡嗡的转
就是舵机的塑料转子顶住了灯的开关没转回90度
需要适当的把塑料的转子刮去一些或者剪短一些。
需要按自己实际安装情况处理
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。