一、初识HarmonyOS-HiSpark 3861开发板
1.1 第一个代码:实现WiFi模块的AT指令配置
# 在DevEco的串口终端中,依次执行如下AT命令,启动STA模式,连接指定AP热点,并开启DHCP功能。
AT+STARTSTA # 启动STA模式
AT+SCAN # 扫描周边AP
AT+SCANRESULT # 显示扫描结果
AT+CONN="DSK33",,2,"123456789" # 连接指定AP,其中SSID/PASSWORD为待连接的热点名称和密码
AT+STASTAT # 查看连接结果
AT+DHCP=wlan0,1 # 通过DHCP向AP请求wlan0的IP地址
# 查看WLAN模组与网关联通是否正常,如下图所示。
AT+IFCFG # 查看模组接口IP
AT+PING=X.X.X.X # 检查模组与网关的联通性,其中X.X.X.X需替换为实际的网关地址
AT+STARTSTA
AT+SCAN
AT+SCANRESULT
AT+CONN="DSK33",,2,"123456789"
AT+STASTAT
AT+DHCP=wlan0,1
AT+IFCFG
AT+PING=10.138.39.213
1.2 第二个代码:打印 hello world
1.2.1 修改源码
bugfix和新增业务两种情况,涉及源码修改。下面以新增业务(my_first_app)为例,向开发者介绍如何进行源码修改。
-
确定目录结构。
开发者编写业务时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
. └── applications └── sample └── wifi-iot └── app │── my_first_app │ │── hello_world.c │ └── BUILD.gn └── BUILD.gn
-
编写业务代码。
新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
#include <stdio.h> #include "ohos_init.h" #include "ohos_types.h" void HelloWorld(void) { printf("[DEMO] Hello world.\n"); } SYS_RUN(HelloWorld);
-
编写用于将业务构建成静态库的BUILD.gn文件。
新建**./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn**文件,并完成如下配置。
BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。
static_library("myapp") { sources = [ "hello_world.c" ] include_dirs = [ "//utils/native/lite/include" ] }
- static_library中指定业务模块的编译结果,为静态库文件libmyapp.a,开发者根据实际情况完成填写。
- sources中指定静态库.a所依赖的.c文件及其路径,若路径中包含"//“则表示绝对路径(此处为代码根路径),若不包含”//"则表示相对路径。
- include_dirs中指定source所需要依赖的.h文件路径。
-
编写模块BUILD.gn文件,指定需参与构建的特性模块。
配置**./applications/sample/wifi-iot/app/BUILD.gn文件,在features**字段中增加索引,使目标模块参与编译。features字段指定业务模块的路径和目标,以my_first_app举例,features字段配置如下。
import("//build/lite/config/component/lite_component.gni") lite_component("app") { features = [ "my_first_app:myapp", ] }
- my_first_app是相对路径,指向./applications/sample/wifi-iot/app/my_first_app/BUILD.gn。
- myapp是目标,指向./applications/sample/wifi-iot/app/my_first_app/BUILD.gn中的static_library(“myapp”)。
1.2.2 调测验证
目前调试验证的方法有两种,分别为通过printf打印日志、通过asm文件定位panic问题,开发者可以根据具体业务情况选择。
由于本示例业务简单,采用printf打印日志的调试方式即可。下面开始介绍这两种调试手段的使用方法。
printf打印
代码中增加printf维测,信息会直接打印到串口上。开发者可在业务关键路径或业务异常位置增加日志打印,如下所示。
void HelloWorld(void)
{
printf("[DEMO] Hello world.\n");
}
1.2.3 代码的编译
以上代码编辑好以后就可以直接编译了
1、进入到~/harmony/code/code-1.0
目录下,找到 build.py
文件,执行以下命令:
$ python build.py wifiiot
=== start build ===
Done. Made 57 targets from 53 files in 236ms
ninja: Entering directory `/home/harmony/harmony/code/code-1.0/out/wifiiot'
...### 省略一万字
[section0_compress=0x1][section0_offset=0x3c0][section0_len=0x69480]
[section1_compress=0x0][section1_offset=0x0][section1_len=0x0]
-------------output/bin/Hi3861_wifiiot_app_ota.bin image info print end--------------
< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >
BUILD SUCCESS # 说明编译成功!
< ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >
See build log from: /home/harmony/harmony/code/code-1.0/vendor/hisi/hi3861/hi3861/build/build_tmp/logs/build_kernel.log
[198/198] STAMP obj/vendor/hisi/hi3861/hi3861/run_wifiiot_scons.stamp
ohos wifiiot build success!
2、现在我们就能在out/
文件夹里我们就能找到刚刚编译好的wifiiot
文件了
harmony@harmony-virtual-machine:~/harmony/code/code-1.0/out$ ls
ipcamera_hi3516dv300 wifiiot wifiiot.bak
3、用vscode专用插件烧录(windows环境下)
4、烧录完成后,打开串口,复位开发板,如果有以下结果,则程序烧录成功!