
1. HI3861 WiFi开发入门指南第一次接触HI3861的WiFi开发时我完全被各种专业术语搞晕了。STA模式、AP模式、LwIP协议栈...这些概念对于新手来说确实不太友好。不过别担心我会用最直白的语言带你理解这些概念。简单来说HI3861是华为推出的一款物联网专用芯片内置了WiFi功能。我们可以把它想象成一个迷你路由器只不过它比普通路由器更智能。在实际项目中我们通常需要让设备既能连接路由器STA模式又能自己创建热点AP模式。比如智能家居中的网关设备既要连接家里的WiFi又要给其他设备提供接入点。开发环境搭建其实很简单。我推荐使用官方提供的HiBurn工具和DevEco Device Tool。记得第一次使用时我花了半天时间折腾环境变量后来发现其实只要按照官方文档一步步来就行。这里有个小技巧安装完工具后先运行一个简单的GPIO控制例程确保基础开发环境没问题再开始WiFi开发。2. STA模式开发实战2.1 基础配置要让HI3861连接路由器首先需要初始化WiFi模块。这个过程就像给手机开机后打开WiFi功能一样简单WifiErrorCode error EnableWifi(); if (error ! WIFI_SUCCESS) { printf(开启WiFi失败错误码%d\n, error); return -1; }这里有个容易踩坑的地方EnableWifi()只是打开了WiFi功能还没有连接任何网络。就像你打开了手机的WiFi开关但还没选择要连接的热点。2.2 扫描与连接接下来我们需要扫描周围的WiFi网络。这个过程和手机上看到的WiFi列表是一个原理WifiScanInfo info[WIFI_SCAN_HOTSPOT_LIMIT]; unsigned int size WIFI_SCAN_HOTSPOT_LIMIT; error GetScanInfoList(info, size); if (error ! WIFI_SUCCESS) { printf(扫描WiFi失败错误码%d\n, error); return -1; }扫描到目标网络后就需要配置连接参数了。这里我强烈建议把SSID和密码定义为宏方便后期修改#define TARGET_SSID 我家WiFi #define TARGET_PASSWORD 12345678 WifiDeviceConfig config {0}; strcpy(config.ssid, TARGET_SSID); strcpy(config.preSharedKey, TARGET_PASSWORD); config.securityType WIFI_SEC_TYPE_PSK;2.3 连接状态监控实际项目中我们需要实时监控连接状态。这时候就需要注册事件回调函数了static void OnWifiConnectionChangedHandler(int state, WifiLinkedInfo *info) { if (state 0) { printf(连接成功信号强度%d dBm\n, info-rssi); } else { printf(连接断开原因%d\n, info-disconnectedReason); } } // 注册事件回调 g_wifiEventHandler.OnWifiConnectionChanged OnWifiConnectionChangedHandler; RegisterWifiEvent(g_wifiEventHandler);3. AP模式开发详解3.1 创建WiFi热点让HI3861自己创建热点比连接现有网络要复杂一些。首先需要配置热点参数#define AP_SSID MyDeviceAP #define AP_PASSWORD 88888888 HotspotConfig config {0}; strcpy(config.ssid, AP_SSID); strcpy(config.preSharedKey, AP_PASSWORD); config.securityType WIFI_SEC_TYPE_PSK; config.band HOTSPOT_BAND_TYPE_2G; config.channelNum 6; // 建议使用1、6、11这些不重叠的信道3.2 设备连接管理当有设备连接到我们的热点时我们需要知道谁连上来了。这时候就需要实现STA连接回调static void OnHotspotStaJoinHandler(StationInfo *info) { char mac[18]; snprintf(mac, sizeof(mac), %02X:%02X:%02X:%02X:%02X:%02X, info-macAddress[0], info-macAddress[1], info-macAddress[2], info-macAddress[3], info-macAddress[4], info-macAddress[5]); printf(新设备连接MAC地址%s\n, mac); }3.3 DHCP服务器配置为了让连接的设备能自动获取IP地址我们需要配置DHCP服务器struct netif *netif netifapi_netif_find(ap0); if (netif) { ip4_addr_t ip, netmask, gw; IP4_ADDR(gw, 192, 168, 4, 1); IP4_ADDR(ip, 192, 168, 4, 1); IP4_ADDR(netmask, 255, 255, 255, 0); err_t ret netifapi_netif_set_addr(netif, ip, netmask, gw); if(ret ERR_OK) { netifapi_dhcps_start(netif, 0, 0); } }4. 双模式切换实战4.1 模式切换逻辑在实际项目中我们经常需要在STA和AP模式间切换。这里分享一个我在智能家居项目中用到的切换策略设备启动后首先尝试连接预设的WiFiSTA模式如果连接失败则切换到AP模式允许用户通过手机配置网络用户配置完成后设备重新尝试连接指定WiFi4.2 常见问题排查在开发过程中我遇到过不少坑这里分享几个典型问题的解决方法无法扫描到WiFi网络检查天线连接是否良好确认WiFi频段设置正确2.4G/5G连接频繁断开可能是信号强度不足可以通过GetLinkedInfo()获取RSSI值判断DHCP获取IP失败检查DHCP服务器是否正常启动确认IP地址池配置正确4.3 性能优化建议经过多次项目实践我总结出几个优化WiFi性能的小技巧在STA模式下定期检查连接状态自动重连AP模式下限制最大连接数避免资源耗尽合理设置心跳包间隔平衡功耗和实时性5. 进阶开发技巧5.1 低功耗优化对于电池供电的设备WiFi功耗优化至关重要。可以通过以下方式降低功耗// 设置WiFi睡眠模式 WifiPowerMode mode WIFI_POWER_MODE_LOW; SetPowerMode(mode);5.2 网络通信实战有了网络连接后我们就可以实现设备与服务器通信了。以HTTP请求为例void send_http_request() { struct netconn *conn netconn_new(NETCONN_TCP); netconn_connect(conn, 192.168.1.100, 80); char request[] GET /api/data HTTP/1.1\r\nHost: 192.168.1.100\r\n\r\n; netconn_write(conn, request, strlen(request), NETCONN_COPY); // 处理响应... netconn_close(conn); netconn_delete(conn); }5.3 安全加固物联网设备安全不容忽视建议至少实现以下安全措施使用WPA2-PSK加密方式定期更换AP模式下的默认密码实现连接设备的白名单机制记得第一次做OTA升级功能时因为没有做好安全验证导致设备被恶意固件攻击。后来我们增加了固件签名验证问题才得到解决。6. 项目实战经验在最近的智能农业项目中我们需要在温室部署多个传感器节点。每个节点都采用HI3861的STAAP双模式设计平时作为STA连接中央网关当需要现场调试时又可以作为AP让技术人员直接连接。这个项目让我深刻体会到好的WiFi模块不仅要功能完善更要稳定可靠。我们最终实现的方案具有以下特点连接失败自动重试最多尝试5次信号强度低于-70dBm时触发报警内置看门狗网络异常时自动重启调试过程中最头疼的是信号干扰问题。温室里的金属支架和灌溉系统对WiFi信号影响很大。后来我们通过调整天线位置和优化信道选择才解决了这个问题。