开发

  1. 请先完成《Hi3861快速入门》

LED控制参考示例存放于applications/sample/wifi-iot/app/iothardware/led_example.c文件中。 2. 实现IOT外设控制,首先需要通过查阅原理图明确接线关系。经过查阅,可以发现LED与功能复用管脚WIFI_IOT_IO_NAME_GPIO_9相连。

开发 - 图1 说明: 开发板原理图,请开发者联系Hi3861购买渠道客服获取。 3. 使用GPIO前,需要完成GPIO管脚初始化,明确管脚用途,并创建任务,使LED周期性亮灭,达到闪烁的效果。

```

  1. static void LedExampleEntry(void)
  2. {
  3. osThreadAttr_t attr;

  4. / 管脚初始化 /

  5. GpioInit();
  6. / 配置9号管脚作为GPIO /
  7. IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
  8. / 配置9号管脚为输出方向 /
  9. GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);

  10. attr.name = "LedTask";

  11. attr.attr_bits = 0U;
  12. attr.cb_mem = NULL;
  13. attr.cb_size = 0U;
  14. attr.stack_mem = NULL;
  15. attr.stack_size = LED_TASK_STACK_SIZE;
  16. attr.priority = LED_TASK_PRIO;

  17. / 启动任务 /

  18. if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
  19. printf("[LedExample] Falied to create LedTask!\n");
  20. }
  21. } ```
  22. 在循环任务中通过周期性亮灭形式实现LED闪烁。

```

  1. static void LedTask(const char arg)
  2. {
  3. (void)arg;
  4. while (1) {
  5. switch (g_ledState) {
  6. case LED_ON:
  7. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
  8. usleep(LED_INTERVAL_TIME_US);
  9. break;
  10. case LED_OFF:
  11. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
  12. usleep(LED_INTERVAL_TIME_US);
  13. break;
  14. case LED_SPARK:
  15. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
  16. usleep(LED_INTERVAL_TIME_US);
  17. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
  18. usleep(LED_INTERVAL_TIME_US);
  19. break;
  20. default:
  21. usleep(LED_INTERVAL_TIME_US);
  22. break;
  23. }
  24. }
  25. return NULL;
  26. } ```
  27. 在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)

```

  1. SYS_RUN(LedExampleEntry); ```
  2. 修改applications/sample/wifi-iot/app/BUILD.gn文件,使led_example.c参与编译。

```

  1. import("//build/lite/config/component/lite_component.gni")
  2. lite_component("app") {
  3. features = [
  4. "iothardware:led_example"
  5. ]
  6. } ```