【物联网】基于立创EDA与鸿蒙HI3861的智能开关开发实战

发布时间:2026/7/9 9:43:59

【物联网】基于立创EDA与鸿蒙HI3861的智能开关开发实战 【物联网】基于立创EDA与鸿蒙HI3861的智能开关开发实战最近有不少朋友问我想入门鸿蒙物联网开发有没有一个能兼顾硬件设计和软件编程的实战项目今天咱们就来聊聊这个——用立创EDA画板子用华为的HI3861芯片从零开始做一个能连Wi-Fi的智能开关。这个项目是我自己学习鸿蒙时做的第一个练习踩过一些坑也总结了不少经验特别适合想上手鸿蒙物联网的硬件工程师和嵌入式爱好者。通过这个项目你能完整地走一遍物联网设备的开发流程从芯片选型、原理图设计、PCB绘制到鸿蒙系统的程序编写、编译烧录最后实现手机远程控制开关。整个过程就像搭积木咱们一步步来。1. 项目核心认识鸿蒙HI3861LV100芯片模组做智能开关核心是那颗能联网的“大脑”。这里我们选用的是华为海思的HI3861LV100芯片模组。对于初学者来说你可能更熟悉ESP8266这类Wi-Fi芯片但HI3861是华为为鸿蒙生态量身打造的原生支持鸿蒙轻量系统开发起来更顺畅。简单来说HI3861是一个高度集成的片上系统SoC。它内部集成了一个高性能的32位处理器负责运行咱们写的程序逻辑。一个完整的Wi-Fi子系统支持2.4GHz频段能让我们的开关连接到家里的路由器上。丰富的外设接口比如GPIO通用输入输出引脚、UART串口、I2C、PWM等这些就是我们用来控制继电器、读取按键状态的工具。选择它不仅是因为它性能足够更重要的是它背靠鸿蒙生态。华为提供了完整的鸿蒙轻量系统LiteOS-M支持以及配套的开发工具链HUAWEI DevEco Device Tool这让我们的软件开发工作事半功倍。注意HI3861模组通常有邮票孔和贴片两种封装。对于我们自己打样焊接更推荐选择贴片封装如LQFP焊接难度会比邮票孔低一些。2. 硬件设计用立创EDA绘制智能开关电路有了核心芯片接下来就要为它设计一个“家”也就是设计电路板。这里我们使用立创EDA它对国内用户非常友好免费、在线操作、元件库丰富特别适合个人开发者和小项目。2.1 核心电路HI3861最小系统要让HI3861跑起来首先得搭建它的最小系统。这就像给电脑接上电源和内存条一样是基础中的基础。电源电路HI3861通常需要3.3V的供电。我们的设计思路是外部输入一个5V-12V的直流电源比如常见的USB 5V或电源适配器通过一个降压稳压芯片如AMS1117-3.3转换成稳定的3.3V供给HI3861模组和板子上其他芯片使用。记得在电源输入和输出端加上滤波电容比如一个10uF的电解电容并联一个0.1uF的瓷片电容这样可以滤除电源噪声让系统更稳定。时钟电路芯片工作需要心跳节拍也就是时钟。HI3861外部需要接一个24MHz的晶振并配上两个负载电容通常是22pF。这个晶振的精度会影响Wi-Fi通信的稳定性所以尽量选择质量好一点的。复位电路为了让芯片能从异常状态恢复我们需要一个复位按钮。最简单的设计就是一个按键串联一个10kΩ的上拉电阻到3.3V按键另一端接地。当按下按键复位引脚被拉低芯片就重启了。下载调试接口为了把程序烧录进去需要留出串口UART接口。HI3861一般通过UART0与电脑通信。我们需要引出TXD、RXD两个引脚接上一个USB转TTL串口模块比如CH340G。同时还要引出一个GPIO引脚用于控制芯片进入烧录模式。在立创EDA里你可以直接放置一个4Pin的排针座来表示这个接口。2.2 功能电路开关与控制最小系统保证芯片能工作接下来要添加智能开关的具体功能。继电器驱动电路这是控制电器通断的执行机构。HI3861的GPIO引脚输出电流很小通常几个mA无法直接驱动继电器线圈需要几十mA。所以我们需要一个“驱动放大器”这里用一个NPN三极管如S8050或者一个MOS管就可以实现。电路连接HI3861的一个GPIO引脚通过一个1kΩ的限流电阻连接到三极管的基极B。三极管的发射极E接地集电极C接继电器线圈的一端。继电器线圈的另一端接电源比如5V。在继电器线圈两端一定要反向并联一个续流二极管如1N4148这是为了保护三极管防止继电器断开时产生的高压反向电动势击穿三极管。按键输入电路我们需要一个物理按键用于本地手动控制开关或者配网复位。设计很简单一个按键一端接地另一端通过一个10kΩ的上拉电阻接到3.3V同时连接到HI3861的一个GPIO引脚。当按键未按下时GPIO读到的是高电平3.3V按下时GPIO被拉低到地读到低电平。程序里检测这个引脚的电平变化就能知道按键是否被按下了。状态指示电路加一个LED灯会非常有用可以用来指示系统上电、Wi-Fi连接状态、开关状态等。将一个LED串联一个220Ω-1kΩ的限流电阻接到HI3861的另一个GPIO引脚和地之间。通过程序控制GPIO输出高低电平就能点亮或熄灭LED。2.3 PCB布局与布线要点原理图画好后在立创EDA里切换到PCB界面进行布局布线。分区布局把板子大致分为几个区域电源区降压芯片、滤波电容、核心区HI3861模组、晶振、继电器驱动区、接口区排针、接线端子。相互干扰大的部分要隔开比如继电器和大电流走线要远离晶振和模拟信号部分。电源线加粗给3.3V和5V或输入电源的走线加粗比如用到20-30mil0.5-0.76mm减少线路压降和发热。晶振走线24MHz晶振要尽量靠近HI3861的时钟引脚走线要短且直下方不要走其他信号线最好在晶振下方铺地铜进行屏蔽。打过孔合理使用过孔连接顶层和底层的铺铜地平面为信号提供完整的回流路径。设计完成后可以使用立创EDA的“设计规则检查DRC”功能查错确认无误后就可以生成Gerber文件发送给PCB制板厂打样了。3. 软件开发鸿蒙系统上的智能开关程序硬件在打样的时候咱们就可以同步开始软件部分的开发了。鸿蒙为HI3861提供了完整的开发环境。3.1 搭建鸿蒙开发环境安装DevEco Device Tool这是华为官方的鸿蒙设备开发工具基于VSCode。去华为开发者官网就能下载安装。安装时注意勾选HI3861相关的编译工具链和烧录工具。获取源码我们需要鸿蒙轻量系统LiteOS-M针对HI3861的源码。可以通过华为的代码托管平台如Gitee获取。创建工程在DevEco Device Tool中导入HI3861的源码工程。我们的应用程序代码将放在applications/sample/wifi-iot/app目录下。3.2 编写应用程序让开关“智能”起来我们的程序主要做三件事初始化硬件、连接Wi-Fi、响应控制命令。下面我给出一个最核心的代码框架和思路。第一步引脚与硬件初始化首先我们要在代码里定义好哪个引脚控制继电器哪个引脚接按键哪个引脚接LED。#include ohos_init.h #include cmsis_os2.h #include hi_gpio.h #include hi_io.h #include hi_pwm.h // ... 其他必要的头文件 // 定义引脚号根据你的实际PCB连接来修改 #define RELAY_GPIO 10 // 控制继电器的GPIO引脚 #define KEY_GPIO 11 // 按键输入的GPIO引脚 #define LED_GPIO 12 // 状态指示灯的GPIO引脚 // 初始化GPIO函数 static void GpioInit(void) { // 将继电器控制引脚设置为输出模式初始输出低电平继电器常开 hi_gpio_set_dir(RELAY_GPIO, HI_GPIO_DIR_OUT); hi_gpio_set_ouput_val(RELAY_GPIO, HI_GPIO_VALUE0); // 将按键引脚设置为输入模式并启用上拉对应硬件电路的上拉电阻 hi_io_set_func(KEY_GPIO, HI_IO_FUNC_GPIO); // 先设置引脚功能为GPIO hi_gpio_set_dir(KEY_GPIO, HI_GPIO_DIR_IN); hi_gpio_set_pull(KEY_GPIO, HI_GPIO_PULL_UP); // 将LED引脚设置为输出模式初始输出低电平LED灭 hi_gpio_set_dir(LED_GPIO, HI_GPIO_DIR_OUT); hi_gpio_set_ouput_val(LED_GPIO, HI_GPIO_VALUE0); }第二步连接Wi-Fi网络设备上电后需要主动连接到家里的路由器。鸿蒙提供了简洁的Wi-Fi连接API。#include hi_wifi_api.h static void ConnectToWifi(void) { const char *ssid Your_WiFi_SSID; // 你的Wi-Fi名称 const char *password Your_Password; // 你的Wi-Fi密码 hi_wifi_sta_config config {0}; (void)strcpy_s(config.ssid, sizeof(config.ssid), ssid); (void)strcpy_s(config.password, sizeof(config.password), password); // 启动Wi-Fi工作站模式 hi_wifi_sta_start(config); // 等待连接成功在实际项目中这里需要更完善的超时和重试机制 osDelay(5000); // 延时5秒等待连接 // 可以添加检查连接状态的代码比如用hi_wifi_sta_get_link_status }第三步实现控制逻辑连接网络后设备需要能够被控制。这里有两种方式本地控制循环检测按键状态当按键按下时翻转继电器和LED的状态。网络控制这需要设备作为一个服务器监听网络命令。鸿蒙支持使用TCP Socket或更上层的协议如MQTT来实现。这里以创建一个简单的TCP服务器为例监听来自手机APP的开关命令。// 一个简单的任务用于检测本地按键 static void KeyScanTask(void *arg) { (void)arg; hi_gpio_value key_val; hi_gpio_value last_val HI_GPIO_VALUE1; // 假设初始为上拉状态高电平 hi_bool relay_state HI_FALSE; // 继电器状态false为关 while (1) { hi_gpio_get_input_val(KEY_GPIO, key_val); // 检测按键按下从高电平变为低电平 if ((last_val HI_GPIO_VALUE1) (key_val HI_GPIO_VALUE0)) { osDelay(20); // 简单消抖延时20ms再判断 hi_gpio_get_input_val(KEY_GPIO, key_val); if (key_val HI_GPIO_VALUE0) { // 确认按下 relay_state !relay_state; // 翻转状态 // 控制继电器 hi_gpio_set_ouput_val(RELAY_GPIO, relay_state ? HI_GPIO_VALUE1 : HI_GPIO_VALUE0); // 控制LED hi_gpio_set_ouput_val(LED_GPIO, relay_state ? HI_GPIO_VALUE1 : HI_GPIO_VALUE0); printf(Switch toggled via key. State: %s\n, relay_state ? ON : OFF); } } last_val key_val; osDelay(50); // 每50ms扫描一次按键 } } // 主入口函数由鸿蒙系统调用 void SmartSwitchDemo(void) { printf(Smart Switch Demo Start!\n); GpioInit(); // 初始化GPIO ConnectToWifi(); // 连接Wi-Fi // 创建按键扫描任务 osThreadAttr_t attr {0}; attr.name KeyScanTask; attr.stack_size 1024; attr.priority osPriorityNormal; if (osThreadNew(KeyScanTask, NULL, attr) NULL) { printf(Failed to create KeyScanTask!\n); } // 这里还可以创建网络服务器任务用于接收远程控制命令 // CreateNetworkServerTask(); printf(Smart Switch is running...\n); } // 使用鸿蒙的启动宏注册这个应用 SYS_RUN(SmartSwitchDemo);3.3 编译与烧录编译在DevEco Device Tool中选择正确的工程和开发板HI3861点击编译按钮。如果代码没有错误最终会生成一个.bin文件这就是我们要烧录到芯片里的固件。烧录硬件连接用USB转TTL模块连接电脑和智能开关板子的串口下载接口。注意交叉连接模块的TXD接板子的RXD模块的RXD接板子的TXDGND对接。进入烧录模式先按住板子上的“烧录模式”按钮或对应的GPIO拉低然后按一下复位键再松开烧录按钮。执行烧录在DevEco Device Tool中选择烧录功能指定生成的.bin文件选择正确的串口号点击烧录。看到进度条走完提示成功即可。复位运行烧录完成后按一下复位键程序就开始运行了。打开串口调试助手如Putty、MobaXterm设置好波特率通常是115200就能看到程序打印的“Smart Switch Demo Start!”等日志信息了。4. 功能验证与下一步当硬件焊接好程序也烧录进去之后就可以上电测试了。本地测试按下板载的物理按键应该能听到继电器“咔嗒”的吸合与断开声同时指示灯LED的状态也会随之改变。串口日志会打印开关状态变化。网络测试确保设备连接Wi-Fi成功后可以通过日志查看你需要编写一个简单的手机APP或者电脑上的网络调试助手连接到设备创建的TCP服务器假设你实现了发送特定的命令比如发送字符1表示开0表示关观察继电器是否响应。到这里一个最基础的鸿蒙智能开关就完成了。当然这只是一个起点。在实际产品中你还需要考虑更多配网如何让设备第一次使用时能获取到Wi-Fi密码通常需要实现SmartConfig微信配网或AP配网模式。协议使用更通用的物联网协议如MQTT连接到云平台华为云IoT、阿里云等实现真正的远程控制。功耗如果使用电池供电需要考虑低功耗设计让设备大部分时间处于睡眠模式。安全网络通信需要加密设备身份需要认证。这个项目麻雀虽小五脏俱全。它串联起了硬件设计、鸿蒙系统编程、外设驱动、网络通信这几个物联网开发最关键的技术点。希望你能通过动手实践这个项目真正踏入鸿蒙物联网开发的大门。遇到问题别怕多查文档、多看日志、多调试这些都是嵌入式工程师的日常。

相关新闻