【雕爷学编程】MicroPython手册之 WiPy 特定端口库 wipy.machine.I2C.writeto()

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

MicroPython 是一种适用于微控制器的 Python 语言的精简实现,它可以让开发者使用 Python 语法和标准库来编写嵌入式应用程序。WiPy 是一种基于 ESP32 芯片的无线开发板,它支持运行 MicroPython 固件。MicroPython 特定于 WiPy 的库是一组为 WiPy 设计的模块,它们提供了 WiPy 的特有功能和硬件接口的访问。MicroPython 特定于 WiPy 的库的主要特点如下:

1、它包含了一些与 WiPy 相关的模块,如 machine, network, pycom, uos 等,它们分别提供了 WiPy 的机器级别控制,网络连接,灯光控制,操作系统接口等功能。
2、它还包含了一些通用的 MicroPython 模块,如 binascii, hashlib, math, random, struct, time 等,它们提供了一些常用的数据处理,加密,数学,随机数,数据结构,时间等功能。
3、它遵循了 MicroPython 的设计原则,即简洁,高效,可移植和兼容。

在这里插入图片描述

MicroPython的 wipy.machine.I2C.writeto()是一个用于向I2C总线上写入数据的方法,它可以接收一个从设备的7位地址和一个包含要写入数据的字节对象作为参数,然后将字节对象中的数据发送到从设备。它有两个参数:

addr是一个整数,表示从设备的7位地址。
buf是一个字节对象,包含要写入的数据。

wipy.machine.I2C.writeto()的主要特点有:

它是一个软件I2C的实现,使用位组合来执行读写操作,可以在任何引脚上使用,但效率不高。
它只能在I2C对象处于控制器模式时有效,即在创建或初始化I2C对象时指定mode为I2C.CONTROLLER。
它在写入数据之前会自动发送起始信号和从设备地址,并在写入数据之后会自动发送终止信号。

wipy.machine.I2C.writeto()的应用场景有:

在需要向I2C协议兼容的外部设备写入数据时,可以调用该方法来简化通信过程。
在需要写入任意长度的数据时,可以调用该方法来指定要写入的字节对象。
在需要写入不含内存地址的数据时,可以调用该方法来直接写入数据。

wipy.machine.I2C.writeto()需要注意的事项有:

在使用wipy.machine.I2C.writeto()之前,需要先导入machine模块,并创建相应的I2C对象。
在使用wipy.machine.I2C.writeto()时,需要保证SCL和SDA引脚上有合适的上拉电阻,否则可能导致通信失败或不稳定。
在使用wipy.machine.I2C.writeto()时,需要注意与外部设备匹配好通信参数,如地址,频率,位宽等。

以下是MicroPython的 wipy.machine.I2C.writeto()几个实际运用程序参考案例:

案例一:使用wipy.machine.I2C.writeto()向DS18B20温度传感器发送转换命令

from machine import I2C, Pin
import time
i2c = I2C(scl=Pin(4), sda=Pin(5), freq=100000) # 创建并初始化I2C对象
addr = 0x48 # 从设备地址
i2c.writeto(addr, b'\x44') # 发送转换命令
time.sleep_ms(750) # 等待转换完成

案例二:使用wipy.machine.I2C.writeto()向Nokia 5110液晶显示器发送显示命令

from machine import I2C, Pin
i2c = I2C(scl=Pin(4), sda=Pin(5), freq=100000) # 创建并初始化I2C对象
addr = 0x3c # 从设备地址
i2c.writeto(addr, b'\x21') # 发送扩展指令集命令
i2c.writeto(addr, b'\xc0') # 发送偏置系统命令
i2c.writeto(addr, b'\x20') # 发送基本指令集命令
i2c.writeto(addr, b'\x0c') # 发送正常显示模式命令

案例三:使用wipy.machine.I2C.writeto()向W25Q64闪存芯片写入数据

from machine import I2C, Pin
i2c = I2C(scl=Pin(4), sda=Pin(5), freq=100000) # 创建并初始化I2C对象
addr = 0x50 # 从设备地址
i2c.writeto(addr, b'\x06') # 发送写使能命令
i2c.writeto(addr, b'\x02') # 发送页编程命令
i2c.writeto(addr, b'\x00\x00\x00') # 发送地址
i2c.writeto(addr, b'Hello World!') # 发送数据

案例四:向设备写入固定长度的数据:

import machine

# 初始化I2C总线
i2c = machine.I2C(0, pins=("P9", "P10"))

# 设置目标设备地址
device_address = 0x50

# 要写入的数据
data = bytearray([0x12, 0x34, 0x56, 0x78])

# 向设备写入固定长度的数据
i2c.writeto(device_address, data)

# 关闭I2C总线
i2c.deinit()

在这个示例中,我们初始化了一个I2C对象并指定其为0号I2C总线。我们设置了I2C总线的引脚,使用"P9"作为SDA引脚,"P10"作为SCL引脚。然后,我们设置了要写入数据的目标设备地址为0x50,并创建了一个长度为4的字节数组作为要写入的数据。我们使用i2c.writeto()方法向设备写入数据。

案例五:向设备写入可变长度的数据:

import machine

# 初始化I2C总线
i2c = machine.I2C(0, pins=("P9", "P10"))

# 设置目标设备地址
device_address = 0x50

# 要写入的数据
data = bytearray([0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC])

# 向设备写入可变长度的数据
bytes_written = i2c.writeto(device_address, data)

print("Bytes written:", bytes_written)

# 关闭I2C总线
i2c.deinit()

在这个示例中,我们初始化了一个I2C对象并指定其为0号I2C总线。我们设置了I2C总线的引脚,使用"P9"作为SDA引脚,"P10"作为SCL引脚。然后,我们设置了要写入数据的目标设备地址为0x50,并创建了一个长度为6的字节数组作为要写入的数据。我们使用i2c.writeto()方法向设备写入数据,并将实际写入的字节数存储在bytes_written变量中。最后,我们打印出实际写入的字节数。

案例六:向不同设备连续写入数据:

import machine

# 初始化I2C总线
i2c = machine.I2C(0, pins=("P9", "P10"))

# 向设备1写入数据
device_address1 = 0x50
data1 = bytearray([0x12, 0x34])
i2c.writeto(device_address1, data1)

# 向设备2写入数据
device_address2 = 0x60
data2 = bytearray([0x56, 0x78, 0x9A])
i2c.writeto(device_address2, data2)

# 关闭I2C总线
i2c.deinit()

在这个示例中,我们初始化了一个I2C对象并指定其为0号I2C总线。我们设置了I2C总线的引脚,使用"P9"作为SDA引脚,"P10"作为SCL引脚。然后,我们分别设置了要写入数据的两个不同设备的地址(设备1地址为0x50,设备2地址为0x60)。我们创建了两个不同长度的字节数组作为要写入的数据(data1为长度为2的字节数组,data2为长度为3的字节数组)。我们使用i2c.writeto()方法向设备1写入data1数据,然后向设备2写入data2数据。

案例七:控制LED灯:使用wipy.machine.I2C.writeto()方法可以向连接到I2C总线上的LED控制器发送命令或数据,以控制LED的亮灭。以下是一个示例:

import machine

# 初始化I2C对象
i2c = machine.I2C(0, scl=machine.Pin(5), sda=machine.Pin(4), freq=400000)

# 向LED控制器发送命令以控制LED灯
command = bytearray([0xFF])  # 命令字节,例如0xFF表示打开所有LED
i2c.writeto(0x10, command)  # 将命令字节发送到设备地址为0x10的LED控制器

在这个示例中,我们创建了一个I2C对象,并通过指定I2C总线的编号、时钟和数据线引脚以及通信频率进行初始化。然后,我们创建了一个长度为1的字节数组,其中包含LED控制器的命令字节。接下来,我们使用i2c.writeto()方法将命令字节发送到设备地址为0x10的LED控制器,以控制LED的亮灭。

案例八:设置温度传感器的采样频率:使用wipy.machine.I2C.writeto()方法可以向连接到I2C总线上的温度传感器发送配置命令,以设置采样频率或其他参数。以下是一个示例:

import machine

# 初始化I2C对象
i2c = machine.I2C(0, scl=machine.Pin(5), sda=machine.Pin(4), freq=400000)

# 向温度传感器发送配置命令以设置采样频率
command = bytearray([0x02, 0x10])  # 配置命令字节,例如0x02表示设置采样频率,0x10表示10Hz
i2c.writeto(0x20, command)  # 将配置命令字节发送到设备地址为0x20的温度传感器

在这个示例中,我们创建了一个I2C对象,并通过指定I2C总线的编号、时钟和数据线引脚以及通信频率进行初始化。然后,我们创建了一个长度为2的字节数组,其中包含温度传感器的配置命令字节。接下来,我们使用i2c.writeto()方法将配置命令字节发送到设备地址为0x20的温度传感器,以设置采样频率。

案例九:发送数据到LCD显示屏:使用wipy.machine.I2C.writeto()方法可以向连接到I2C总线上的LCD显示屏发送数据,以在屏幕上显示文本或图像。以下是一个示例:

import machine

# 初始化I2C对象
i2c = machine.I2C(0, scl=machine.Pin(5), sda=machine.Pin(4), freq=400000)

# 向LCD显示屏发送数据以显示文本
data = bytearray([0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64])  # 要显示的文本数据
i2c.writeto(0x27, data)  # 将文本数据发送到设备地址为0x27的LCD显示屏

在这个示例中,我们创建了一个I2C对象,并通过指定I2C总线的编号、时钟和数据线引脚以及通信频率进行初始化。然后,我们创建了一个长度为11的字节数组,其中包含要在LCD显示屏上显示的文本数据。接下来,我们使用i2c.writeto()方法将文本数据发送到设备地址为0x27的LCD显示屏,以在屏幕上显示文本。

请注意,实际的使用情况可能会有所不同,具体的设备地址、命令字节、数据格式等需要根据您使用的具体硬件和协议进行调整。上述示例仅提供了一般的参考,您需要根据自己的需求进行适当的修改。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值