HarmonyOS实现点亮LED
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。
人工智能编程入门博客
新增业务
新建工程
- 创建工程目录
在 applications\sample\wifi-iot\app\ 文件夹下新建一个文件夹LEDDemo,用于存放新增业务的文件。
- 添加业务文件
在LEDDemo文件夹下新建两个文件: BUILD.gn 和 led_example.c 。
其中BUILD.gn为编译脚本,led_example.c 为业务逻辑代码所在文件,具体目录结构如下:
.
└── applications└── sample└── wifi-iot└── app│── LEDDemo│ │── led_example.c│ └── BUILD.gn└── BUILD.gn
- 编写业务代码
在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);
- 新增业务中的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文件路径。
- 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文件中#号代表注释的意思。
- 编译
在鸿蒙操作系统代码根目录下,在终端中输入“python build.py wifiiot”命令启动编译。
终端中出现如下信息编译表示成功:
- 下载并更新固件
将“\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相关推荐
- 61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯)
61-20210407华为海思Hi3516DV300的linux系统下控制GPIO口(标准linux模式点亮LED灯) 2021/4/7 15:13 https://xueqiu.com/797071 ...
- 和12岁小同志搞创客开发:手撕代码,点亮LED灯
目录 1.Arduino编程架构 2.点亮LED灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_381069 ...
- zigbee学习之路(二)点亮LED
一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...
- STM32F 103C8T6开发板 点亮LED灯
每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...
- STC89C52单片机 点亮LED灯
点亮LED灯 一.什么是LED LED全称为半导体发光二极管,采用半导体材料制成的,以直接将电能转化为光能,电号转换成光信号的发光器件:其特点是功耗低.高亮度.色彩艳丽.坑振动.寿命长(正常发光8-1 ...
- stm32核心板可以点亮灯吗_STM32库函数点亮LED
很多码农写出的第一个程序是"Hello World!",因为这个程序简单容易上手,能给你自信心,让你更加坚定学习编程的信念:单片机也是如此,相信很多单片机老师教给你的第一个程序就是 ...
- 从零开始的51单片机——(1)点亮LED
从零开始的51单片机--点亮LED 原理 对于开发板上的8个LED分别对应一个八位二进制数. 当对应位为1的时候LED灯灭,为0的时候灯亮 例如1111 1110则是第一个LED灯亮 在C语言中,我们 ...
- Raspberry PI 系列 —— 裸机点亮LED灯
Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...
- 蓝桥杯小白系列之汇编点亮led灯
蓝桥杯小白系列之汇编点亮led灯 1.源代码 2.逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起. (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会 ...
最新文章
- 自定义Lisp透明命令
- 如何解决局域网内传输速度过慢问题
- android 无法运行 项目红叉_Android Studio 项目报红叉没法运行的几种解决办法总结...
- 手把手教你在Mac OS下载、编译及导入Android源码
- centos7建站php_centos7搭建php服务器
- linux主机添加discuz伪静态规则,(总结)Nginx下Discuz 7.2伪静态规则设置
- iview 后台管理系统 搭建
- python支持complex吗_Python中complex函数有什么用?
- iis启动时发生意外错误0x8ffe274的解决方法
- SDP中fmtp的使用
- 右键菜单 GenericMenu
- 如何发挥思维导图真正的杀伤力?
- log4cpp编译安装
- 程序员是怎么分享微信二维码的
- 七大数据分析模型详解,做分析不再没思路
- Confluence导出PDF文件乱码
- Qt 给文本添加删除线 text-decoration
- 2021谷歌IO大会内容
- 跨越OpenGL和D3D的鸿沟[转]
- 生产者消费模型-管程法
热门文章
- linux jdk,hadoop,zookeeper, hive , zeppelin ,sqoop ,hbase,scala,spark,flume,kafka 安装终极脚本全家桶安装
- 晨读播报一:快手与抖音之间的较量
- ubuntu18 配置运行SVO pro工程(入门)
- 云服务器怎么设置成代理服务器?
- 求勾股数元祖(java)
- 微信公众平台 微接口 接口100 API100 接口大全(转) 开发微信功能简便了
- python 做行转列通过enbid对应多个cell一行显示
- “查看更多”功能,较完美的实现
- 曾经拥有VS天长地久
- 服务器esxi虚拟机黑苹果性能,EXSi安装Mac打造Mac Pro