将鸿蒙上的 Python 进行到底!

共 2346字,需浏览 5分钟

 ·

2021-12-14 18:44

关注不迷路


这其实不是什么大不了的事,从功能的角度也着实不值得炫耀!然而,这却是非常重要的一步:在鸿蒙上用使用 Python 进行物联网编程是可行的!!!

既然可行,加上 Python 语言天生的优势(易于掌握,开发效率高),那么真的值得持续打造,将鸿蒙上的 Python 进行到底。

所以,今天的主题就是利用 GPIO 搭配 I2C 对外设进行编程。主要内容为:通过控制“智慧农业”外设板上的传感器,获取当前环境的温度和湿度。
这块外设板上的 SHT30 是一个温度湿度传感器,它通过 I2C 与主控板(Hi3861)进行连接。

因此,SHT30 是一种 I2C 设备,只需要通过 I2C 接口就能轻易对它进行控制。

什么是 I2C?一般能查到的定义都会是:I2C(Inter-Integrated Circuit)是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。

所以,把 I2C 直接看作总线是 OK 的,即:SHT30 与 Hi3861 直接通过 I2C 总线相连。

除此之外,也可以把 I2C 看作一种通信协议,即:SHT30 与 Hi3861 通过 2 根信号线连接在一起,并遵守预定义的规则,进而能够交换信息。

那么,是不是在开发板上有 I2C 专用的物理线路呢?

答案是:没有!开发板已经提供了一堆用于普适输入输出的 GPIO 了,所以没有必要为 I2C 提供专用的物理线路, 只需要复用 GPIO 即可实现 I2C 通信!


所以,下面的代码就有了:
在原理上,I2C 需要 2 根信号线完成设备间的通信;其中 SDA 为串行数据线,用来传输起始标志,应答标志和数据;而 SCL 为串行时钟线,用来对设备进行同步。

因此,在代码层面,需要编程复用 2 个 GPIO 完成对 I2C 的支持。而 GPIO_0 能够提供 I2C1_SDA 的功能,GPIO_1 能够提供 I2C1_SCL 的功能。

所以在真正初始化 I2C1 之前需要对 GPIO_0 和 GPIO_1 进行正确的功能设置,否则,设备间无法进行通信。

当 GPIO 的初始化完成,接下来就是对 I2C1 的初始化了,方法很简单:将 I2C1 的 ID 和波特率作为参数调用 i2c_init(),可谓完全无难度。

最后,进行设备初始化,这一步也只需要向目标设备发送初始化命令即可,如:向 SHT30 发送 [0x22, 0x36]。

OK!相信上面的初始化代码大家理解起来没有问题了。那么,我们来推理一下: 有 I2C1 那么有没有 I2C0 呢?

答案是:有!鸿蒙 L0 设备目前通过复用 GPIO 的方式提供 2 个 I2C 供使用。

当初始化正确完成,接下来就是读取 SHT30 上的实时数据了!


上面的代码非常简洁,但似乎不那么好理解!

没关系,我们先来熟悉一下目前 Python 提供的 I2C 接口函数。


有了这个表格,我们很容易就能理解上面的代码片段了,即:先向 I2C1 上的 SHT30 发送读取命令 [0xE0, 0x00],然后再从设备读取 6 个字节的数据。如果函数执行成功,那么可得到从设备返回到的温湿度数据。

完整交互过程如下图所示:
这里对 SHT30 返回的数据做一点说明。如果读取成功,SHT30 会返回 6 个字节的数据,其中前 3 个字节表示温度数据,后 3 个字节表示湿度数据。

并且,d[2] 和 d[5] 分别表示温度和湿度的校验字节,通过这两个字节即可判断读取到的温湿度数据是否有效(注:本文的示例中,为了方便大家理解,没有做数据校验的工作。)

最后就是温湿度数据的转换了,方法如下:

有了这些的工作,下面就只需要循环调用 read() 即可完成最终目标:获取当前环境温湿度。


最后的运行结果如下:



更新提示:这个版本的实现同时支持 1.0 和 1.1 的代码,因此,大家需要根据代码版本编译 dt_python_demo。


将 dt_python_demo 拷贝到应用目录:
  • 1.0:./applications/sample/wifi-iot/app

  • 1.1:./applications/sample/BearPi/BearPi-HM_Nano



修改 app 模块的任务列表:

  • 1.0:./applications/sample/wifi-iot/app/BUILD.gn

  • 1.1:./applications/sample/BearPi/BearPi-HM_Nano/BUILD.gn



libdtpython.a 路径:

  • 1.0:./vendor/hisi/hi3861/hi3861/build/libs

  • 1.1:./device/bearpi/bearpi_hm_nano/sdk_liteos/build/libs


根据代码版本修改 BUILD.gn:

Enjoy it!


代码开源地址:
https://gitee.com/delphi-tang/python-for-hos

逆锋起笔是一个专注于程序员圈子的技术平台,你可以收获最新技术动态最新内测资格BAT等大厂的经验精品学习资料职业路线副业思维,微信搜索逆锋起笔关注!

又一本 Python 可视化好书来了!

Python 爬虫,看这几本书就够了!

一些日常使用的 Python 技巧分享

Python 竟然也能做这样的进度条。。。

Python 暴力破解附近局域网 WiFi 密码



求分享

求点赞

求在看

浏览 32
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报