电子产业一站式赋能平台

PCB联盟网

搜索
查看: 627|回复: 0
收起左侧

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连连载】我和鸿蒙的亲密接触----点亮第一颗LED

[复制链接]

2607

主题

2607

帖子

7472

积分

高级会员

Rank: 5Rank: 5

积分
7472
发表于 2020-12-22 09:56:23 | 显示全部楼层 |阅读模式
【HarmonyOS HiSpark Wi-Fi IoT 套件试用连连载】我和鸿蒙的亲密接触----点亮第一颗LED, 对于liteos_m有了一定认识之后,就不多说废话了,直接开始。
首先需要在某个目录新建一个一个文件夹存放业务逻辑代码。

目录路径:./applications/sample/wifi-iot/app,在该路径下新建一个文件夹LED,其中led.c,BUILD.gn为编译脚本,具体目录结构如下:



目录地址.png (12.92 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 19:12 上传


新建并编写led.c的业务逻辑代码以及编译脚本

新建./applications/sample/wifi-iot/app/led下的led.c文件,在led.c中新建业务入口函数led,并实现led的GPIO初始化。调用HarmonyOS启动恢复模块接口SYS_RUN()启动业务。

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(“led_example“){
      
  •     sources = [
      
  •         “led.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 = [
      
  •          “led:Wiking“,
      
  •     ]
      
  • }

复制代码 在虚拟机上执行python build.py wifiiot进行编译,当出现下图时,编译成功即可烧入。



编译成功.png (19.27 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 23:43 上传

烧入操作可以借鉴上一帖。



亮灯.png (43.48 KB, 下载次数: 0)

下载附件  保存到相册  

昨天 23:45 上传
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表