0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用WB2系列模组做一个433遥控网关

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2025-04-09 13:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以下作品由安信可社区用户

业余菜狗制作

前言

自从接触智能家居之后,笔者就变得很依赖智能家居(绝对不是懒!)

比如卧室灯,就在进门的地方,进门开灯很方便,但是晚上睡觉关灯就很不方便。

之前是买了一款Wi-Fi灯,是用手机APP操作,刚开始用的时候感觉很方便,后面用久了,觉得每次都要开APP操作也很烦,所以就在网上查了一下,有那种无线开关,按一下就能开关灯,把按钮贴在床头,需要开关灯就点一下,比点APP更方便!

但是!!!网上卖的无线按钮开关可不便宜,众所周知笔者的时薪是14.4所以这种方案我是拒绝的。那?就没有便宜的方案了吗???

还真让我找到了——433射频开关,淘宝或多多上(用券之后)才3块多一个,但是笔者用的Home Assistant系统是不能直接接入433开关的,所以就用安信可Ai-WB2模组DIY了一个433网关,将433遥控信号转发给Home Assistant.

成品如下图,已经测试几个月了,还是比较稳的

wKgZPGf2DDqANEJpAAG0Z4d4cb0734.jpg

1、DIY思路

数据处理流程:433按钮-->433接收模块-->WB2-->HA-->灯

433按钮:当按下433按钮时发送键值

433接收模块:接收到433键值后用uart发送给WB2

WB2:uart收到键值之后,将键值用mqtt发送给HA

HA:收到WB2的mqtt信息之后,根据用户设定控制灯(或其它设备)

灯:HA让我亮,那我就亮,让我灭,我就灭

2、准备工作

●一个433按钮开关

●Ai-WB2-12F模组及开发环境

●一个433接收模块(笔者用的是蜂鸟无线的R1A模块)

●一个USB公头,一片PCB,一堆小零件

●一个3D打印的外壳

3、编程开发

因为433按钮是现成的,所以不需要开发,只有WB2和HA部分需要编程,HA部分还好,主要是WB2需要大量的代码。

WB2射频网关代码思路

整体思路是这样的,wb2启动后开始链接WiFi和mqtt服务器,连上之后,发送设备信息给HA,让HA发现wb2并生成设备实体;

然后在433接收到遥控键值之后,用串口(uart)通信给wb2,wb2收到串口数据后,分析数据,并将数据通过mqtt发送给HA,至此完成一次传送。如果不想看下面的代码,那只需要改这两个地方就能用了。

main.c里面的WiFi账号密码

#define wifi_ssid "WiFi名称"
#define wifi_pass "WiFi密码"

yycg_mqtt.h里面的mqtt服务器信息

//设定MQTT服务器
#define mqtt_host "192.168.31.158"
#define mqtt_port 1883
#define mqtt_username "Ai-Thinker-WB2-433gateway"
#define mqtt_password ""

main函数

启动之后,先初始化uart,并连接wifi及mqtt,这里使用了多任务,wifi和mqtt是一个任务,uart也用了一个任务,软时钟任务,这几个任务是并行的。

void main(){
//初始化LED
bl_gpio_enable_output(LED_IO, 1, 0);
bl_gpio_output_set(LED_IO, 0);
//初始化配对按钮
bl_gpio_enable_input(pair_IO, 1, 0);
//初始化uart,初始化之后,自带的log会失效,算是一个bug
uart_init();
uart0_print("开始运行用户代码n");
vTaskDelay(1000);
//读取保存的WiFi账号信息
if(get_flash_wifi_data() == 1){
uart0_print("已读取WiFi数据n");
}else{
uart0_print("未找到WiFi数据,正在写入预设数据n");
set_flash_wifi_data(wifi_ssid, wifi_pass);
get_flash_wifi_data();
}
vTaskDelay(1000);
//启动WiFi和mqtt任务
xTaskCreate(Task_mqtt, "Task_mqtt", 20480, NULL, 15, NULL);
//启动软时钟任务
xTaskCreate(Task_time, "Task_time", 2048, NULL, 5, NULL);
//启动uart任务
xTaskCreate(Task_Uart, "Task_Uart", 2048, NULL, 10, NULL);
}

uart任务

void Task_Uart(void *param){
//初始化uart
uint8_t data[32];
int ret;
hosal_uart_dev_t uart_dev_echo = {
.config = {
.uart_id = 0,
.tx_pin = 6, // TXD GPIO
.rx_pin = 4, // RXD GPIO
.cts_pin = 255,
.rts_pin = 255,
.baud_rate = 9600,
.data_width = HOSAL_DATA_WIDTH_8BIT,
.parity = HOSAL_NO_PARITY,
.stop_bits = HOSAL_STOP_BITS_1,
.mode = HOSAL_UART_MODE_POLL,
},
};
bl_gpio_output_set(LED_IO, 1);
hosal_uart_init(&uart_dev_echo);
ret = hosal_uart_receive(&uart_dev_echo, data, sizeof(data));
//进入死循环读取串口数据
while(1) {
uint8_t uart_433_data[16];
uint8_t mqtt_433_data[6];
uint8_t mqtt_433_data_old[6];
uint8_t mqtt_st;
ret = hosal_uart_receive(&uart_dev_echo, data, sizeof(data));
if (ret > 0){
size_t x = 0;
for (size_t i = 0; i < ret; i++){
uart_433_data[x] = data[i];
x++;
}
vTaskDelay(40);//可能是因为波特率是9600速度比较慢,一次接收会不完整,所以等待一下接收两次
ret = hosal_uart_receive(&uart_dev_echo, data, sizeof(data));
for (size_t i = 0; i < ret; i++){
uart_433_data[x] = data[i];
x++;
}
uart0_send(uart_433_data, x);
mqtt_st = 0;
//mqtt_433_data[6] = '';
//将接收到的uart赋值给mqtt信息变量,并判断新旧数据是否一样(433数据可能重复)
for(size_t i = 0; i < 6; i++){
mqtt_433_data[i] = uart_433_data[i+3];
if(mqtt_433_data[i] != mqtt_433_data_old[i]){
mqtt_st = 1;
}
}
//打印出新旧数据
uart0_send(mqtt_433_data_old, 6);
uart0_send((uint8_t *)"n", 1);
uart0_send(mqtt_433_data, 6);
//判断
while(1){//二级循环
if(!(mqtt_st == 1 || time_nv>100))break;//判断是否重复,当数据重复且间隔大于1s(软时钟作用)仍然发送
if(!(pair_event == 0))break;//判断433模块是不是处于配对状态
if(!(mqtt_event == 1))break;//判断mqtt服务器是否连接正常
//发送mqtt数据,并将数据保存到变量方便下次对比
ha_text_send(R1A_ID1, (char*)mqtt_433_data);
for(size_t i = 0; i < 6; i++){
mqtt_433_data_old[i] = mqtt_433_data[i];
}
time_nv = 0;
break;
}
}
vTaskDelay(5);
}
}

软时钟任务

//软时钟函数,time_nv变量10ms自加一次
void Task_time(void *param){
while(1){
time_nv++;
vTaskDelay(10);
}
}

MQTT订阅回调函数

void mqtt_topic_data(char * topic, char * data){
char topic2[128];
//收到HA的上线信息,发送HA自动发现信息
if(strcmp(topic, "homeassistant/status")==0){
ha_config_code();
}
//处理"配对"
connect_topic_str(topic2, "button", R1A_ID2, "cmd_t");
if (strcmp(topic, topic2)==0){
pair_event = 1;
//模拟连续按两下进入配对模式
bl_gpio_enable_output(pair_IO, 1, 0);
bl_gpio_output_set(pair_IO, 0);
vTaskDelay(50);
bl_gpio_output_set(pair_IO, 1);
vTaskDelay(200);
bl_gpio_output_set(pair_IO, 0);
vTaskDelay(50);
bl_gpio_output_set(pair_IO, 1);
bl_gpio_enable_input(pair_IO, 1, 0);
char X = 1;
time_nv = 0;
while(X){
if(!(bl_gpio_input_get_value(pair_IO))){
time_nv = 0;
}
if (time_nv>200){
X = 0;
}
vTaskDelay(200);
}
uint8_t data[16];
uart1_get(data);
pair_event = 0;
}
//处理"重置"
connect_topic_str(topic2, "button", R1A_ID3, "cmd_t");
if (strcmp(topic, topic2)==0){
pair_event = 1;
//模拟长按10S清除配对的遥控
bl_gpio_enable_output(pair_IO, 1, 0);
bl_gpio_output_set(pair_IO, 0);
vTaskDelay(10000);
bl_gpio_output_set(pair_IO, 1);
bl_gpio_enable_input(pair_IO, 1, 0);
char X = 1;
time_nv = 0;
while(X){
if(!(bl_gpio_input_get_value(pair_IO))){
time_nv = 0;
}
if (time_nv>200){
X = 0;
}
vTaskDelay(200);
}
uint8_t data[16];
uart1_get(data);
pair_event = 0;
}
vTaskDelay(1000);
}

HA初始化函数

void ha_config_code(){
//注册"433键值","433配对"按钮,"433重置"按钮
ha_text_config(R1A_ID1, "433键值");
ha_button_config(R1A_ID2, "433配对");
ha_button_config(R1A_ID3, "433重置");
vTaskDelay(1000);
//发送设备上线信息
mqtt_pub(mqtt_lwt_topic, "online");
}

HA设置部分

在你烧录好代码之后,HA中会自动出现一个mqtt设备。

wKgZO2f2DDuAT0JBAABXdG-WUm8444.jpg

点击左边那个MQTT INFO复制433键值下面的topic内容,每个设备中间部分会不一样

homeassistant/text/7CB94CD1F767/433_R1A_001/config

wKgZPGf2DDuAKEsjAABon_xY-eA582.jpg

去自动化设置里面,新建一个自动化,设置为当收到某个 MQTT 消息时,主题填入刚才的内容

wKgZO2f2DDuAN7OuAABzVNe94Xc414.jpg

或者也可以直接复制这段代码贴上(记得改主题)

topic: homeassistant/text/7CB94CD1F767/433_R1A_001/state
trigger: mqtt

然后在下面的"就执行"里面判断键值,先设置一个短延迟,防止数据还没来得及更新。

wKgZPGf2DDyAekiDAAC-rzqLhjU294.jpg

这个也可以复制代码

choose:
- conditions:
- condition: template
value_template: "{{ "8FE004" == states("text.wb2wang_guan_433_433jian_zhi") }}"
alias: 键值判断
sequence:
- action: light.toggle
target:
device_id: a38cb2e40595fabed52aab4309efb240
data: {}
alias: 菜狗86遥控-1-B键-8FE004-开关卧室灯

然后在下面的"就执行"里面判断键值,先设置一个短延迟,防止数据还没来得及更新

wKgZPGf2DDyAekiDAAC-rzqLhjU294.jpg

这个也可以复制代码不过

现在按下433按钮,就能开关灯了

4、硬件、PCB和外壳

硬件接线和PCB

R1A的TX连接WB2的IO4,重置按键"K/O"连接WB2的IO5.

PCB基本上去就是一个傻瓜板很简陋,,资料放附件,有需要的可以改一下自己用。

wKgZO2f2DDyAZJr-AAC8ekmx1zA848.jpg

wKgZPGf2DD2AaXUFAADLlOLJby4557.jpg

外壳

外壳是随便画的,我不太会3D建模,能把PCB装进去就行了

wKgZO2f2DD6AfHkaAAAqcot69-w547.jpg

wKgZPGf2DD6AcoXZAAAq_UtaRBk535.jpg

5、附件

https://bbs.ai-thinker.com/forum.php?mod=attachment&aid=31734(内含以下附件)

附件:mqtt_gateway_433代码.zip

附件:PCB文件_WB2-433_2025-03-19.zip

附件:嘉立创EDA标准版_PCB工程_20250319.zip

附件:外壳.zip

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 遥控
    +关注

    关注

    11

    文章

    290

    浏览量

    58797
  • 网关
    +关注

    关注

    9

    文章

    6446

    浏览量

    55609
  • 智能家居
    +关注

    关注

    1942

    文章

    9944

    浏览量

    195592
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用CW32F003和SYN531R做一个315M遥控器接收解码的小板子,无法工作是什么原因?

    想使用CW32F003系列的芯片和SYN531R接收芯片做一个315M遥控器接收解码的小板子,我在网上搜了下315M解码的协议,做出来后发现无法工作,有没有大佬做过这方面的开发,能否
    发表于 11-20 08:00

    【WiFi+蓝牙】智能门锁、智能插座:Ai-WB2系列,价格更低,性能更强

    对于既有安全性要求又大量面向消费市场的产品,选择 低成本但稳定、易集成 的无线模组,会直接影响 BOM、生产与后续维护成本。 安信可推出的 Ai-WB2
    的头像 发表于 11-19 16:05 206次阅读
    【WiFi+蓝牙】智能门锁、智能插座:<b class='flag-5'>用</b>Ai-<b class='flag-5'>WB2</b><b class='flag-5'>系列</b>,价格更低,性能更强

    电子DIY Ai-WB2-12F模组做多功能无线彩灯控制器

    以下作品由安信可社区用户 iiv 制作 1、项目总览 ●目标:块可插可拔的「无线彩灯控制器」 ●主控选用安信可WB2-12F模组,实现红外、蓝牙接收数据,以及灯带的驱动 ●5-30V电源输入,普通
    的头像 发表于 10-23 10:33 301次阅读
    电子DIY <b class='flag-5'>用</b>Ai-<b class='flag-5'>WB2</b>-12F<b class='flag-5'>模组</b>做多功能无线彩灯控制器

    【Wi-Fi&amp;BLE模组】Ai-WB2系列的固件烧录指导

    文章目录 、前言 二、软硬件的准备 三、原始硬件接线 四、联系我们 前言 本文章教学视频链接: 视频链接 安信可Ai-WB2系列模组集成Wi-FiDownload按钮开始烧录,以下有
    的头像 发表于 08-27 16:19 670次阅读
    【Wi-Fi&amp;BLE<b class='flag-5'>模组</b>】Ai-<b class='flag-5'>WB2</b><b class='flag-5'>系列</b>的固件烧录指导

    433 遥控器 PCBA 开发方案:技术要点与实现路径

    在物联网技术日益普及的当下,433MHz 频段的遥控器因成本低、传输稳定等特点,在智能家居、工业控制等领域得到广泛应用。本文将详细介绍433
    的头像 发表于 08-07 10:39 808次阅读

    CE31-TD系列4G遥控开关模组核心板方案推荐

    CE31-TD系列4G遥控开关模组核心板凭借其高性能、低延迟、多种控制方式和广泛的应用领域,成为市场上备受瞩目的产品。无论是智能家居、工业自动化还是医疗保健等领域,CE31-TD系列
    的头像 发表于 07-10 13:50 408次阅读

    Wi-Fi蓝牙模组Ai-M62-CBS做一个电子沙漏

    以下作品由安信可社区用户 bzhou830 制作 1. 项目简介 本项目通过M62模组设计的超级mini板搭配两8*8点阵,并利用水银开关作为重力检测部件完成电子沙漏。外壳采用3
    的头像 发表于 07-08 10:32 551次阅读
    <b class='flag-5'>用</b>Wi-Fi蓝牙<b class='flag-5'>模组</b>Ai-M62-CBS<b class='flag-5'>做一个</b>电子沙漏

    简单用LoRa模组做无线遥控距离测试

    ,再发回来,这样只要一个人也可以测试距离了。 就像这样: 因为笔者得遥控器是433的,所以LoRa避开同频,就选了868频段的模组Ra-0
    的头像 发表于 07-01 14:03 646次阅读
    简单用LoRa<b class='flag-5'>模组</b>做无线<b class='flag-5'>遥控</b>距离测试

    PN1-S25系列ProfiNet网关模组产品简介

    PN1-S25系列ProfiNet网关模组款专为工业通信环境设计的先进设备,旨在实现ProfiNet与Modbus RTU协议之间的无缝转换,从而优化工业自动化系统中的数据传输效率
    的头像 发表于 04-14 18:21 579次阅读

    安信可Ai-WB2-01S做一个可用网页控制的简易灯

    以下作品由安信可社区用户 KevinLi制作 01简介 使用2不同功率的Led通过GPIO的PWM通道+三极管控制亮度 ●供电:5V或3V ●控制:网页http单向控制,这是
    的头像 发表于 03-26 13:59 670次阅读
    <b class='flag-5'>用</b>安信可Ai-<b class='flag-5'>WB2</b>-01S<b class='flag-5'>做一个</b>可用网页控制的简易灯

    低价不贵!安信可WiFi+BLE模组Ai-WB2系列

    安信可Ai-WB2系列模组集成Wi-Fi&BLE于体,搭载BL602芯片作为核心处理器,支持Wi-Fi 802.11b/g/n协议和BLE 5.0协议。 Ai-
    的头像 发表于 03-06 08:49 814次阅读
    低价不贵!安信可WiFi+BLE<b class='flag-5'>模组</b>Ai-<b class='flag-5'>WB2</b><b class='flag-5'>系列</b>

    我的DIY遥控器——小摆件远程控

    摆件的开关。    DIY遥控器小摆件       想要遥控摆件的电源开关,就需要有RF遥控器发射信号,加
    的头像 发表于 02-17 11:02 1458次阅读

    全智芯433Mhz无线遥控级联RGB炫彩灯方案

    全智芯433无线遥控级联RGB炫彩灯方案是基于ASP32F003芯片所开发的具有RGB彩灯变幻的智能灯具方案。该项目采用硬件“SPI+DMA”来实现信号的传输,相较于采用软件模拟的SRZ归零码来说
    的头像 发表于 01-14 09:48 1100次阅读

    文详解:区分315MHz和433MHz遥控模块

    315MHz或433MHz频段属于国家规定的开放频段,允许小功率、短距离的无线电设备自由使用,无需特殊审批,因此其已被广泛应用在无线遥控模块之中,那么315MHz和433MHz遥控模块
    的头像 发表于 01-06 15:22 5452次阅读
    <b class='flag-5'>一</b>文详解:区分315MHz和<b class='flag-5'>433</b>MHz<b class='flag-5'>遥控</b>模块

    安信可Ai-WB2系列的优势是?秒读懂!

    ) 集成度 (内置功能、接口类型等) 功耗与续航 、 尺寸与外观 、 成本 等多个因素。 安信可Ai-WB2系列模组集成Wi-Fi&蓝牙于体,搭载BL602芯片作为核心处理器,支持W
    的头像 发表于 12-13 18:16 1150次阅读