電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 595|回復(fù): 0
收起左側(cè)

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連連載】我和鴻蒙的親密接觸----點(diǎn)亮第一顆LED

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級會(huì)員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-12-22 09:56:23 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
【HarmonyOS HiSpark Wi-Fi IoT 套件試用連連載】我和鴻蒙的親密接觸----點(diǎn)亮第一顆LED, 對于liteos_m有了一定認(rèn)識(shí)之后,就不多說廢話了,直接開始。
首先需要在某個(gè)目錄新建一個(gè)一個(gè)文件夾存放業(yè)務(wù)邏輯代碼。

目錄路徑:./applications/sample/wifi-iot/app,在該路徑下新建一個(gè)文件夾LED,其中l(wèi)ed.c,BUILD.gn為編譯腳本,具體目錄結(jié)構(gòu)如下:



目錄地址.png (12.92 KB, 下載次數(shù): 0)

下載附件  保存到相冊  

昨天 19:12 上傳


新建并編寫led.c的業(yè)務(wù)邏輯代碼以及編譯腳本

新建./applications/sample/wifi-iot/app/led下的led.c文件,在led.c中新建業(yè)務(wù)入口函數(shù)led,并實(shí)現(xiàn)led的GPIO初始化。調(diào)用HarmonyOS啟動(dòng)恢復(fù)模塊接口SYS_RUN()啟動(dòng)業(yè)務(wù)。

1、BUILD.gn為編譯腳本

2、led.c為led代碼

led.c



  • #include <stdio.h>
      
  • #include <unistd.h>
      

  •   
  • #include “ohos_init.h“
      
  • #include “cmsis_os2.h“
      
  • #include “wifiiot_gpio.h“
      
  • #include “wifiiot_gpio_ex.h“
      

  •   
  • #define LED_INTERVAL_TIME_US300000
      
  • #define LED_TASK_STACK_SIZE512
      
  • #define LED_TASK_PRIO 25
      

  •   
  • enum LedState
      
  • {
      
  •     LED_ON = 0,
      
  •     LED_OFF,
      
  •     LED_SPARK,
      
  • };
      

  •   
  • enum LedState g_ledState = LED_SPARK;
      

  •   
  • static void *LedTask(constchar *arg)
      
  • {
      
  •     (void)arg;
      
  •     while (1)
      
  •     {
      

  •   
  •         GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1);
      
  •         switch (g_ledState)
      
  •         {
      
  •         case LED_ON:
      
  •             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 1);
      
  •             usleep(LED_INTERVAL_TIME_US);
      
  •             break;
      
  •         case LED_OFF:
      
  •             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, 0);
      
  •             usleep(LED_INTERVAL_TIME_US);
      
  •             break;
      
  •         case LED_SPARK:
      
  •             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 0);
      
  •             usleep(LED_INTERVAL_TIME_US);
      
  •             GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, 1);
      
  •             usleep(LED_INTERVAL_TIME_US);
      
  •             break;
      
  •         default:
      
  •             usleep(LED_INTERVAL_TIME_US);
      
  •             break;
      
  •         }
      
  •     }
      

  •   
  •     return NULL;
      
  • }
      

  •   
  • static voidLedExampleEntry(void)
      
  • {
      
  •     osThreadAttr_t attr;
      

  •   
  •     GpioInit();
      
  •     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
      
  •     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
      

  •   
  •     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
      
  •     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_OUT);
      

  •   
  •     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
      
  •     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_OUT);
      

  •   
  •     IoSetFunc(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);
      
  •     GpioSetDir(WIFI_IOT_IO_NAME_GPIO_10, WIFI_IOT_GPIO_DIR_OUT);
      

  •   
  •     attr.name = “LedTask“;
      
  •     attr.attr_bits = 0U;
      
  •     attr.cb_mem = NULL;
      
  •     attr.cb_size = 0U;
      
  •     attr.stack_mem = NULL;
      
  •     attr.stack_size = LED_TASK_STACK_SIZE;
      
  •     attr.priority = LED_TASK_PRIO;
      
  •     printf(“[LedExample] try to createLedTask!\n“);
      
  •     if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL)
      
  •     {
      
  •         printf(“[LedExample] Falied tocreate LedTask!\n“);
      
  •     }
      
  • }
      

  •   
  • SYS_RUN(LedExampleEntry);

復(fù)制代碼 同級目錄下的BUILD.gn



  • static_library(“l(fā)ed_example“){
      
  •     sources = [
      
  •         “l(fā)ed.c“
      

  •   
  •     include_dirs = [
      
  •        “//utils/native/lite/include“,
      
  •        “//kernel/liteos_m/components/cmsis/2.0“,
      
  •        “//base/iot_hardware/inteRFaces/kits/wifiiot_lite“,
      
  • }

復(fù)制代碼 上一級目錄的BUILD.gn



  • import(“//build/lite/config/component/lite_component.gni“)
      

  •   
  • lite_component(“app“) {
      
  •     features = [
      
  •          “l(fā)ed:Wiking“,
      
  •     ]
      
  • }

復(fù)制代碼 在虛擬機(jī)上執(zhí)行python build.py wifiiot進(jìn)行編譯,當(dāng)出現(xiàn)下圖時(shí),編譯成功即可燒入。



編譯成功.png (19.27 KB, 下載次數(shù): 0)

下載附件  保存到相冊  

昨天 23:43 上傳

燒入操作可以借鑒上一帖。



亮燈.png (43.48 KB, 下載次數(shù): 0)

下載附件  保存到相冊  

昨天 23:45 上傳

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表