本次实践是为尝试在嵌有华为海思芯片的 Hi3861 WIFI物联网开发板上配置开发环境并使用配套开发工具( HUAWEI DevEco Device Tool 或 HUAWEI LiteOS Studio )将Demo工程编译烧录和运行。
参照华为海思编撰的 《物联网技术和应用》 进行搭建。
1.确认开发环境已经正确安装后,启动 Huawei LiteOS Studio
2.新建工程, SDK版本 选择 HiHope WiFi_IoT Hi3861SPC025
SDK目录 在HiSpark_Pegasus_TechnologyApplication_IoT_Kit下的 HiHope_WiFi-IoT_Hi3861SPC025 ;
参考目录 选择在HiSpark_Pegasus_TechnologyApplication_IoT_Kit下的 HiHope_Pegasus_HelloWorld 。
目标板Hi3861V100。
3.按F4进入工程配置, 目标板配置 中:厂商 HiSilicon ,选中目标板 Hi3861V00 ,确认。
4. 编译器配置森渗散 中:SConstruct脚本,点击文件夹右侧的放大镜自动搜索SConstruct脚本位置,正常搜索完点确认。
5. 烧录器配置 中:烧录方式选择 HiBurner ,确认。
6. 串口配置 中:成功连接Hi3861板后,端口选择唯一一个COM端口;波特率选择 921600 ,确认。
7.F7 编译 ,成功此氏时终端输出紫色 BUILD SUCCESS 字样。
8.F8 烧录 ,出现HiBurn程序窗口时,按一次喊链Hi3861板上的Ret按键,烧录开始。成功时如图:
9.烧录完成,重新拔插数据线,HelloWorld程序运行正常,OLED屏上显示Hello World字样,Hi3861板上LED灯闪烁。
Californium 是一款基于Java实现的Coap技术框架,该项目实现了Coap协议的各种请求响应定义,支持CON/NON不同的可靠性传输模式。GIT地址: https://github.com/eclipse/californium
模块说明
~.californium-core
californium 核心模块,定义了一系列协议栈核心接口,并提供了Coap协议栈的完整实现,
~.element-connector
从core模块剥离的连接器模块,用于抽象穗拆网络传输层的接口,使得coap可以同时运行于udp和tcp多种传输协议之上;
~.scandium-core
Coap over DTLS 支持模块,提供了DTLS 传输的Connector实现;
~.californium-osgi
californium 的osgi 封装模块;
~.californium-proxy
coap 代理模块,用于支持coap2coap、coap2http、http2coap的转换;
~.demo-xxx
样例程序;
其中,californium-core和element-connector是coap技术实现最关键的模块,后面的分析将围绕这两个模块进行。
Californiium 定义了三层架构:
1 网络层,负携族碧责处理端口监听,网络数据收发;
2 协议层,负责Coap协议数据包解析及封装,实现消息的路由、可靠性传输、Token处理、观察者模型等等;
3 逻辑层,负责 Resource定义和映射,一个Resource 对应一个URL,可独立实现Coap 请求处理。
异步线程池
三层架构中都可以支持独立的线程池,其中网络层与协议层的线程池保持独立;
逻辑层可为每个Resource指定独立的线程池,并支持父级继承的机制,即当前Resource若没有定义则沿用父级Resource线程辩举池;
若逻辑层未指定线程池,则默认使用协议层的线程池。
GIT地址: https://github.com/eclipse/californium
Coap是基于UDP的应用层,但是Californium实现了coap udp和tcp两种传输层协议,单次请求传输限制在1M以内。
提供:GET、POST、PUT、DELETE四种请求类型。
Coap是基于二进制的协议,header只有4个字节,非常紧凑。
console模式既是即时命令行模式戚巧, 也可以称之为交互模式, 就像micropython的交互模式一样
烧录console模式脚本, 烧录方法和第一篇中讲解的一样, 脚本是luattools v2自带的,在 \resource\8910_script\script_LuaTask_V2.3.6\demo\console 目录下
烧录完成后, 我们需要用一条micro-USB数据线连接UART接口, 然后打开电脑上的串口调试助手, 我们可以看到串口调试助手进入了console
根据air724ug a13原橘仔拦理图: http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/attachment/20210106210504049_EVB_Air724UG_A13_%E8%AE%BE%E8%AE%A1%E6%96%87%E4%BB%B6_20200723.pdf
我们可以看到: gpio1接到了 绿色LED灯上
现在我们想点亮这个灯, 方法就是在console中输入命令使得gpio1引脚拉高
具体 *** 作步骤只有一步, 在控制台输入:
灯亮了。这里, 我们其实用了一个pins模块的setup函数。参考API: http://doc.openluat.com/wiki/3?wiki_page_id=1382
参考文档: http://doc.openluat.com/wiki/6?wiki_page_id=60
Air724UG模块引脚共支持29个GPIO,部分引脚上电前后状态不同,如使用这些管脚,需根据实际情况使用。
注意 : Air724UG没有GPIO8
对luat来说 GPIO控制只有以下两个方法:
首先要引入 pins模块
返回值
返回function
配置为输出模式时,返回的函数,可以设置IO的电平
配置为输入圆胡或者中断模式时,返回的函数,可以实时获取IO的电平
精彩的设计, 以下是举例:
我们可以初始化一个pin脚blue_led为输出.
此时blue_led这个变量是个function类型的数据
上面的配置是输出模式,所以返回的function可以设置IO的电平
明白了, setup以后,控制GPIO高低可以直接 blue_led(0) 这样了
以demo中的console为例:
通过看main文件,我们可以确定:
下面我们来一个LED闪烁程序,尝尝鲜
然后开始编写逻辑:
我们发现, 一个小小的闪灯并不简单, 涉及了任务等我们没有接触过的luat特性, 接下来, 我们会慢慢的越来越了解
下面, 尝试将闪烁函数抽取并开启多任务
根据上面的 pins.setup 函数,如果函数的第二个参数传入function的话,就会开启GPIO中断
下面我们来尝试一下:
由于开发板没有按键,我们使用GPIO15来模拟按键, GPIO15的位置如下图所示
开启中断模式, 我们首先要定义一个function作为中断函数, 这里还是使用了匿名函数
根据上面的 pins.setup 函数的返回值, 如果是中断模式时,返回的函数可以实时获取IO的电平, 所以我们可以看一下中断电平
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)