HarmonyOS Connect設備開發,相信不少剛入門的開發者都被這些問題所困擾,面對五花八門的開發板不知道該怎么選取?芯片、模組、開發板傻傻分不清?如何使用代碼控制開發板?本期,我們將一一為你解答。
一、芯片適配方案
芯片,是一種將電路集中制造在半導體晶圓表面上的小型化方式,它可以通過系統指令對端口設備進行控制。如果把系統比作一個設備的靈魂,那么芯片就是設備的心臟,芯片廠商基于OpenHarmony的Linux內核、LiteOS-A內核及LiteOS-M內核,面向 HarmonyOS Connect 業務提供了不同的芯片適配方案,如圖1所示:
圖1 芯片適配方案
在HarmonyOS Connect設備開發過程中,采用通過 HarmonyOS Connect 認證的芯片和模組能幫開發者縮短設備開發和認證周期,如圖2所示,列舉了官網上已認證的幾款芯片:
圖2 已認證的芯片
不同類型的芯片適用于不同領域的產品,因此,可以得出一個結論,在進行設備開發前,我們應該明確所開發的設備的類型并選取適合的芯片。
二、芯片、模組、開發板
在設備開發過程中,我們接觸最多的就是芯片、模組、開發板,它們之間有何區別及聯系,我們應該怎么選取呢?下文將為你解答。
1芯片
如圖3所示,是一款高度集成的2.4GHz SoC Wi-Fi的Hi3861V100芯片。這個僅有指甲蓋大小的空間里,卻集成了IEEE 802.11b/g/n基帶、功率放大器PA、低噪聲放大器LNA、RF balun、天線開關以及電源管理等模塊。
圖3 Hi3861V100芯片
由于芯片的尺寸較小,管腳沒有直接引出,天線、電容、電感以及MCU都需要借助外部電路去布置。如果開發者想利用芯片實現Wi-Fi功能,就需要設計芯片的天線部分電路并增加Flash芯片來保存數據,這個實現過程研發成本較高。至此,便有了下面的模組。
2模組
很多模組廠商針對各類芯片設計出各式各樣的模組。如圖4所示,是 Hi3861RNIV100模組,相較于Hi3861V100芯片,該模組還集成了電源電路、Flash芯片、天線電路等,讓開發者直接忽略了上節中芯片Wi-Fi功能實現的部分,大大降低了Wi-Fi開發的難度。同時,模組還可以滿足用戶對芯片二次開發的需求。
圖4 Hi3861RNIV100模組模組是面向產品的,模組在完成測試及驗證后便可直接嵌入到產品中。另外,一個芯片可以制定多個模組,相同的芯片,可通過控制模組的Flash大小、天線的材質、模組尺寸來適配各類智能產品。那么如何對模組的功能進行快速的測試驗證呢?這就有了下面的開發板。
3開發板
如圖5所示,是搭載了Hi3861RNIV100模組的開發板(以下簡稱Hi3861開發板),提供了更加豐富的外圍資源,包括標準的E53接口、NFC標簽、USB Type-C、復位按鍵、用戶按鍵、射頻天線、串口轉換電路等,方便了用戶對Hi3861RNIV100模組的功能進行快速的測試驗證。
圖5 Hi3861開發板開發板是面向“測試學習”的,在提供測試驗證模組性能的同時,還可幫助剛入門的開發者對模組進行快速地學習了解,因此,開發板可看作模組到產品的一個“中間臨時變量”,如圖6所示:
圖6 芯片、模組、開發板的區別總結下來就是,一個芯片可以制定多個模組、一個模組可以嵌入到不同的開發板。這就是為什么我們經??吹交贖i3861開發板的原因。
4如何選取開發板
通過上文的介紹,相信大家已經了解了芯片、模組、開發板之間的關系,下面我們來看看如何選取開發板吧。
(1)根據設備的類型,選取合適的芯片
如第一章提到的,選取開發板前,我們應該確定待開發設備的類型,并選取合適的芯片。
(2)根據設備的功能需求,選擇合適的模組
模組選擇時,應該確定待開發設備所具備的功能,充分考慮功能、成本、尺寸等因素。模組功能越多,引出的引腳更多,模組體積可能更大,成本就越高。例如,如果待開發的設備只需要Wi-Fi功能,則選擇Wi-Fi模組,如果待開發的設備需要Wi-Fi+藍牙功能,則可以選擇選擇Combo模組。
(3)根據不同的應用場景,選擇相應的開發板
模組確認后,我們怎么選取開發板呢?基于不同的應用場景,不同的開發板套件提供的擴展板不同。如圖7所示,例舉了幾個比較典型的擴展板,可通過E53接口進行擴展,使能開發智能加濕器、智能臺燈、智能安防、智能煙感等案例,讓案例開發更加靈活、方便。
圖7 典型的擴展板
所以,選取開發板時,先確定待開發設備的應用場景,再根據各種開發板套件提供的擴展板來選取最合適的開發板。
三、如何控制開發板
相信你已經選擇了一款適合自己的開發板啦,現在我們來看看如何通過代碼控制它吧。如圖8所示,是Hi3861開發板上搭載的E53標準接口,通過OpenHarmony提供的豐富的外設操作能力對E53接口進行控制,從而實現設備開發。
圖8 搭載的E53接口
本文介紹如何通過調用OpenHarmony的NDK接口在Hi3861開發板上編寫一個創建Wi-Fi熱點程序。
1關鍵API
完成Wi-Fi熱點創建,主要使用了以下幾個API。
2實現步驟
完成Wi-Fi熱點創建,需要以下幾步。
(1)通過 RegisterWifiEvent 接口向系統注冊熱點狀態改變事件、STA站點加入事件、STA站點退出事件,相關回調函數如下:
代碼如下:
(左右滑動,查看更多)//注冊wifi事件的回調函數
g_wifiEventHandler.OnHotspotStaJoin = OnHotspotStaJoinHandler;
g_wifiEventHandler.OnHotspotStaLeave = OnHotspotStaLeaveHandler;
g_wifiEventHandler.OnHotspotStateChanged = OnHotspotStateChangedHandler;
error = RegisterWifiEvent(&g_wifiEventHandler);
if (error != WIFI_SUCCESS)
{
printf("RegisterWifiEvent failed, error = %d. ",error);
return -1;
}
printf("RegisterWifiEvent succeed! ");
(2)調用 SetHotspotConfig 接口,設置指定的熱點配置。代碼如下:
(左右滑動,查看更多)//設置指定的熱點配置
HotspotConfig config = {0};
strcpy(config.ssid, AP_SSID);
strcpy(config.preSharedKey, AP_PSK);
config.securityType = WIFI_SEC_TYPE_PSK;
config.band = HOTSPOT_BAND_TYPE_2G;
config.channelNum = 7;
error = SetHotspotConfig(&config);
if (error != WIFI_SUCCESS)
{
printf("SetHotspotConfig failed, error = %d. ", error);
return -1;
}
printf("SetHotspotConfigsucceed! ");
(3)調用 EnableHotspot 接口,使能Wi-Fi AP 模式。代碼如下:
(左右滑動,查看更多)//啟動wifi熱點模式
error = EnableHotspot();
if (error != WIFI_SUCCESS)
{
printf("EnableHotspot failed, error = %d. ", error);
return -1;
}
printf("EnableHotspot succeed! ");
(4)調用 IsHotspotActive 接口,檢查AP熱點模式是否啟用,代碼如下
(左右滑動,查看更多)//檢查熱點模式是否使能
if (IsHotspotActive() == WIFI_HOTSPOT_NOT_ACTIVE)
{
printf("Wifi station is not actived. ");
return -1;
}
printf("Wifi station is actived! ");
(5)調用 netifapi_netif_set_addr 函數設置網卡信息,并調用 netifapi_dhcps_start 函數啟動dhcp服務。代碼如下:
//啟動dhcp
g_lwip_netif = netifapi_netif_find("ap0");
if (g_lwip_netif)
{
ip4_addr_t bp_gw;
ip4_addr_t bp_ipaddr;
ip4_addr_t bp_netmask;
IP4_ADDR(&bp_gw, 192, 168, 1, 1); /* input your gateway for example: 192.168.1.1 */
IP4_ADDR(&bp_ipaddr, 192, 168, 1, 1); /* input your IP for example: 192.168.1.1 */
IP4_ADDR(&bp_netmask, 255, 255, 255, 0); /* input your netmask for example: 255.255.255.0 */
err_t ret = netifapi_netif_set_addr(g_lwip_netif, &bp_ipaddr, &bp_netmask, &bp_gw);
if(ret != ERR_OK)
{
printf("netifapi_netif_set_addr failed, error = %d. ", ret);
return -1;
}
printf("netifapi_netif_set_addr succeed! ");
ret = netifapi_dhcps_start(g_lwip_netif, 0, 0);
if(ret != ERR_OK)
{
printf("netifapi_dhcp_start failed, error = %d. ", ret);
return -1;
}
printf("netifapi_dhcps_start succeed! ");
(左右滑動,查看更多)
以上就是本期全部內容,通過本文的介紹,你心中的疑惑是不是已經解開了?如果是,那么恭喜你,你已經入門HarmonyOS Connect設備開發了,我們期待你的加入。
原文標題:小白入門設備開發的“芯”路歷程
文章出處:【微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
芯片
+關注
關注
455文章
50714瀏覽量
423137 -
wi-fi
+關注
關注
14文章
2132瀏覽量
124422 -
HarmonyOS
+關注
關注
79文章
1973瀏覽量
30143
原文標題:小白入門設備開發的“芯”路歷程
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論