1. 程式人生 > 其它 >HarmonyOS小白入門裝置開發的“芯”路歷程

HarmonyOS小白入門裝置開發的“芯”路歷程

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 晶片、模組、開發板的區別

 

總結下來就是,一個晶片可以制定多個模組、一個模組可以嵌入到不同的開發板。這就是為什麼我們經常看到基於Hi3861開發板的原因。 

 

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.\r\n",error);
        return -1;
    }
    printf("RegisterWifiEvent succeed!\r\n");

 

(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.\r\n", error);
        return -1;
    }
    printf("SetHotspotConfig succeed!\r\n");

 

(3)呼叫 EnableHotspot 介面,使能Wi-Fi AP 模式。程式碼如下:

 

//啟動wifi熱點模式
    error = EnableHotspot(); 
    if (error != WIFI_SUCCESS)
    {
        printf("EnableHotspot failed, error = %d.\r\n", error);
        return -1;
    }
    printf("EnableHotspot succeed!\r\n");

 

 (4)呼叫 IsHotspotActive 介面,檢查AP熱點模式是否啟用,程式碼如下:

 

//檢查熱點模式是否使能
    if (IsHotspotActive() == WIFI_HOTSPOT_NOT_ACTIVE)
    {
        printf("Wifi station is not actived.\r\n");
        return -1;
    }
printf("Wifi station is actived!\r\n");

 

 (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.\r\n", ret);
            return -1;
        }
        printf("netifapi_netif_set_addr succeed!\r\n");


        ret = netifapi_dhcps_start(g_lwip_netif, 0, 0);
        if(ret != ERR_OK)
        { 
            printf("netifapi_dhcp_start failed, error = %d.\r\n", ret);
            return -1;
        }
        printf("netifapi_dhcps_start succeed!\r\n");

 

以上就是本期全部內容。通過本文的介紹,你心中的疑惑是不是已經解開了?如果是,那麼恭喜你,你已經入門HarmonyOS Connect裝置開發了,我們期待你的加入。 

 

 

掃碼新增開發者小助手微信 

獲取更多HarmonyOS開發資源和開發者活動資訊