前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
人工智能编程入门博客

新增业务

新建工程

  1. 创建工程目录

在 applications\sample\wifi-iot\app\ 文件夹下新建一个文件夹LEDDemo,用于存放新增业务的文件。

  1. 添加业务文件

在LEDDemo文件夹下新建两个文件: BUILD.gn 和 led_example.c 。

其中BUILD.gn为编译脚本,led_example.c 为业务逻辑代码所在文件,具体目录结构如下:

.
└── applications└── sample└── wifi-iot└── app│── LEDDemo│  │── led_example.c│  └── BUILD.gn└── BUILD.gn
  1. 编写业务代码

在led_example.c中新建业务入口函数LedExampleEntry,并实现业务逻辑。并在代码最下方,使用 HarmonyOS启动恢复模块接口SYS_RUN()启动业务,被SYS_RUN() 宏设置的函数都将在系统初始化的时候被执行。(SYS_RUN定义在ohos_init.h文件中)

由原理图我们可以看出,GPIO09引脚输出低电平的时候,LED1亮,GPIO09引脚输出高电平的时候,LED1灭。

#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_ON_TIME_US 2000000
#define LED_OFF_TIME_US 1000000static void LedExampleEntry(void)
{//GPIO引脚初始化GpioInit();//设置管脚功能为GPIOIoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);//设置GPIO引脚方向为输出GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);while (1) {//设置GPIO09输出为低电平GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);//打印输出日志printf("[DEMO] LED on.\n");//延时一定时间,即亮灯的持续时间usleep(LED_ON_TIME_US);//设置GPIO09输出为高电平GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);//打印输出日志printf("[DEMO] LED off.\n");//延时一定时间,即灭灯的持续时间usleep(LED_OFF_TIME_US);}
}
SYS_RUN(LedExampleEntry);
  1. 新增业务中的BUILD.gn文件

编写用于将业务构建成静态库的BUILD.gn文件。BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。以LEDDemo新增业务为例,需要创建./applications/sample/wifi-iot/app/LEDDemo/BUILD.gn,并完成如下配置。

static_library("xiaoha") {sources = ["led_example.c"]include_dirs = ["//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//base/iot_hardware/interfaces/kits/wifiiot_lite",]
}

  • static_library中指定业务模块的编译结果,开发者根据实际情况完成填写,最后编译完成,在 /home/harmony/harmony/code/code-1.0/out/wifiiot/libs/ 目录下可以看到生成的库文件,本实例编译之后生成的静态库文件为libxiaoha.a。

  • sources中指定静态库.a所依赖的.c文件及其路径,若路径中包含"//“则表示绝对路径(此处为代码根路径),若不包含”//"则表示相对路径。
  • include_dirs中指定source所需要依赖的.h文件路径。
  1. app目录下BUILD.gn文件

指定需参与构建的特性模块。配置./applications/sample/wifi-iot/app/BUILD.gn文件,在features字段中增加索引,使目标模块参与编译。features字段指定业务模块的路径和目标,以LEDDemo举例,features字段配置如下。

import("//build/lite/config/component/lite_component.gni")lite_component("app") {features = [#"startup","LEDDemo:xiaoha"]
}

  • LEDDemo是相对路径,指向./applications/sample/wifi-iot/app/LEDDemo/。
  • xiaoha是目标,指向./applications/sample/wifi-iot/app/LEDDemo/BUILD.gn中的static_library(“xiaoha”)。
  • #“startup” 在.gn文件中#号代表注释的意思。
  1. 编译

在鸿蒙操作系统代码根目录下,在终端中输入“python build.py wifiiot”命令启动编译。

终端中出现如下信息编译表示成功:

  1. 下载并更新固件

将“\out\wifiiot\Hi3861_wifiiot_app_allinone.bin”文件使用DecEco工具烧入Hi3861最小核心板。

编译及下载更新固件的方法请参考如下网文:

鸿蒙系统固件编译及烧写——通过AT命令完成WLAN模组Hi3861联网

结果展示

按下核心板的RST键,复位模块,我们可以看到核心板上的蓝色LED亮2秒,灭1秒,交替进行,串口输出如下:

参考阅读

  • 华为鸿蒙HarmonyOS Wi-Fi IoT开发套件开箱及简介
  • 鸿蒙开发环境搭建、源码下载和编译
  • HarmonyOS智能设备开发工具—DevEco Device Tool 安装配置
  • 安装并配置Samba服务器–将HarmonyOS的文件映射到Windows 中
  • 鸿蒙系统固件编译及烧写——通过AT命令完成WLAN模组Hi3861联网

欢迎关注

程序员小哈带你玩转嵌入式,微信搜索:嵌入式从0到1,更多干货等着你。

HarmonyOS实现点亮LED相关推荐

  1. 61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯)

    61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯) 2021/4/7 15:13 https://xueqiu.com/797071 ...

  2. 和12岁小同志搞创客开发:手撕代码,点亮LED灯

    目录 1.Arduino编程架构 2.点亮LED灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_381069 ...

  3. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  4. STM32F 103C8T6开发板 点亮LED灯

    每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...

  5. STC89C52单片机 点亮LED灯

    点亮LED灯 一.什么是LED LED全称为半导体发光二极管,采用半导体材料制成的,以直接将电能转化为光能,电号转换成光信号的发光器件:其特点是功耗低.高亮度.色彩艳丽.坑振动.寿命长(正常发光8-1 ...

  6. stm32核心板可以点亮灯吗_STM32库函数点亮LED

    很多码农写出的第一个程序是"Hello World!",因为这个程序简单容易上手,能给你自信心,让你更加坚定学习编程的信念:单片机也是如此,相信很多单片机老师教给你的第一个程序就是 ...

  7. 从零开始的51单片机——(1)点亮LED

    从零开始的51单片机--点亮LED 原理 对于开发板上的8个LED分别对应一个八位二进制数. 当对应位为1的时候LED灯灭,为0的时候灯亮 例如1111 1110则是第一个LED灯亮 在C语言中,我们 ...

  8. Raspberry PI 系列 —— 裸机点亮LED灯

    Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...

  9. 蓝桥杯小白系列之汇编点亮led灯

    蓝桥杯小白系列之汇编点亮led灯 1.源代码 2.逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起. (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会 ...

最新文章

  1. 自定义Lisp透明命令
  2. 如何解决局域网内传输速度过慢问题
  3. android 无法运行 项目红叉_Android Studio 项目报红叉没法运行的几种解决办法总结...
  4. 手把手教你在Mac OS下载、编译及导入Android源码
  5. centos7建站php_centos7搭建php服务器
  6. linux主机添加discuz伪静态规则,(总结)Nginx下Discuz 7.2伪静态规则设置
  7. iview 后台管理系统 搭建
  8. python支持complex吗_Python中complex函数有什么用?
  9. iis启动时发生意外错误0x8ffe274的解决方法
  10. SDP中fmtp的使用
  11. 右键菜单 GenericMenu
  12. 如何发挥思维导图真正的杀伤力?
  13. log4cpp编译安装
  14. 程序员是怎么分享微信二维码的
  15. 七大数据分析模型详解,做分析不再没思路
  16. Confluence导出PDF文件乱码
  17. Qt 给文本添加删除线 text-decoration
  18. 2021谷歌IO大会内容
  19. 跨越OpenGL和D3D的鸿沟[转]
  20. 生产者消费模型-管程法

热门文章

  1. linux jdk,hadoop,zookeeper, hive , zeppelin ,sqoop ,hbase,scala,spark,flume,kafka 安装终极脚本全家桶安装
  2. 晨读播报一:快手与抖音之间的较量
  3. ubuntu18 配置运行SVO pro工程(入门)
  4. 云服务器怎么设置成代理服务器?
  5. 求勾股数元祖(java)
  6. 微信公众平台 微接口 接口100 API100 接口大全(转) 开发微信功能简便了
  7. python 做行转列通过enbid对应多个cell一行显示
  8. “查看更多”功能,较完美的实现
  9. 曾经拥有VS天长地久
  10. 服务器esxi虚拟机黑苹果性能,EXSi安装Mac打造Mac Pro