電子產業(yè)一站式賦能平臺

PCB聯盟網

搜索
查看: 609|回復: 0
收起左側

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

[復制鏈接]

2607

主題

2607

帖子

7472

積分

高級會員

Rank: 5Rank: 5

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

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



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

下載附件  保存到相冊  

昨天 19:12 上傳


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

新建./applications/sample/wifi-iot/app/led下的led.c文件,在led.c中新建業(yè)務入口函數led,并實現led的GPIO初始化。調用HarmonyOS啟動恢復模塊接口SYS_RUN()啟動業(yè)務。

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);

復制代碼 同級目錄下的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“,
      
  • }

復制代碼 上一級目錄的BUILD.gn



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

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

復制代碼 在虛擬機上執(zhí)行python build.py wifiiot進行編譯,當出現下圖時,編譯成功即可燒入。



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

下載附件  保存到相冊  

昨天 23:43 上傳

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



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

下載附件  保存到相冊  

昨天 23:45 上傳
回復

使用道具 舉報

發(fā)表回復

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

本版積分規(guī)則


聯系客服 關注微信 下載APP 返回頂部 返回列表