鱼C论坛

 找回密码
 立即注册
查看: 1245|回复: 7

[新人报道] micropython

[复制链接]
发表于 2023-12-20 18:48:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yc0526vip 于 2023-12-20 18:53 编辑

@FishC

micropython 在ssd1306 自动换行 上下滚动显示 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-20 18:48:17 | 显示全部楼层
首先,您需要连接一个 SSD1306 OLED 显示屏到您的 MicroPython 设备上。然后,您可以使用 u8g2lib 库来控制该显示屏。

下面是一段示例代码,可以实现在 SSD1306 上以滚动的方式显示字符串 "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321":
import machineimport u8g2# 初始化 SSD1306 显示屏i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))ssd1306 = u8g2.SSD1306_I2C(128, 64, i2c)# 设置字体和显示位置ssd1306.setFont(u8g2.font_6x10_tf)x = 0y = 10# 要显示的字符串text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"while True:    # 清空显示屏    ssd1306.clearBuffer()    # 在指定位置显示文本    ssd1306.setCursor(x, y)    ssd1306.print(text)    # 更新显示    ssd1306.sendBuffer()    # 滚动文本    x -= 1    if x < -(len(text) * 6):        x = 128    # 延时    machine.delay(50)
请注意,这段代码假设您已经正确配置了 MicroPython 设备和 SSD1306 显示屏的连接。如果您的连接方式有所不同,请根据具体情况进行调整。

希望这可以帮助到您!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-20 18:53:29 | 显示全部楼层
FishC 发表于 2023-12-20 18:48
首先,您需要连接一个 SSD1306 OLED 显示屏到您的 MicroPython 设备上。然后,您可以使用 u8g2lib 库来控制 ...

micropython 在ssd1306 自动换行 上下滚动显示 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-20 18:53:45 | 显示全部楼层
yc0526vip 发表于 2023-12-20 18:53
micropython 在ssd1306 自动换行 上下滚动显示 123456 ...

对不起,我的回答前面有一处错误。在MicroPython中使用u8g2库控制SSD1306显示屏是不正确的,应该使用ssd1306库。

要在SSD1306上实现自动换行和上下滚动显示文本,您可以使用以下示例代码:
import machineimport ssd1306# 初始化I2C总线和SSD1306显示屏i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))display = ssd1306.SSD1306_I2C(128, 64, i2c)# 要显示的字符串text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"# 文本显示位置和滚动速度x = 0y = 0scroll_speed = 1# 设置字体大小font_width = 6font_height = 8# 计算可以容纳的最大字符数和行数max_chars_per_line = display.width // font_widthmax_lines = display.height // font_height# 循环显示文本while True:    # 清空显示屏    display.fill(0)        # 分割文本为多行    lines = [text[i:i+max_chars_per_line] for i in range(0, len(text), max_chars_per_line)]        # 按行显示文本    for line_index, line in enumerate(lines):        # 计算当前行的y坐标        line_y = y + line_index * font_height                # 显示文本        display.text(x, line_y, line)                # 当超出可显示的行数时,实现上下滚动效果        if len(lines) > max_lines:            display.text(x, line_y - font_height * (len(lines) - max_lines), lines[line_index - max_lines])        # 更新显示    display.show()        # 滚动文本    x -= scroll_speed        # 当文本超出左侧屏幕外时,重置x位置    if x < -(len(text) * font_width):        x = display.width        # 延时    machine.delay(50)
这段代码会在SSD1306上以自动换行和上下滚动的方式显示给定的文本字符串。请根据您的具体需求进行调整,并确保正确连接了SSD1306显示屏到MicroPython设备。

希望这次能帮到您!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-20 19:00:27 | 显示全部楼层
FishC 发表于 2023-12-20 18:53
对不起,我的回答前面有一处错误。在MicroPython中使用u8g2库控制SSD1306显示屏是不正确的,应该使用ssd1 ...

File "<stdin>", line 32, in <module>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-20 19:00:42 | 显示全部楼层

抱歉,我之前的代码有一个错误。在更新显示之前,我应该先调用`display.fill(0)`来清空显示屏。以下是修正后的代码:import machineimport ssd1306# 初始化I2C总线和SSD1306显示屏i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))display = ssd1306.SSD1306_I2C(128, 64, i2c)# 要显示的字符串text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"# 文本显示位置和滚动速度x = 0y = 0scroll_speed = 1# 设置字体大小font_width = 6font_height = 8# 计算可以容纳的最大字符数和行数max_chars_per_line = display.width // font_widthmax_lines = display.height // font_height# 循环显示文本while True:    # 清空显示屏    display.fill(0)        # 分割文本为多行    lines = [text[i:i+max_chars_per_line] for i in range(0, len(text), max_chars_per_line)]        # 按行显示文本    for line_index, line in enumerate(lines):        # 计算当前行的y坐标        line_y = y + line_index * font_height                # 显示文本        display.text(x, line_y, line)                # 当超出可显示的行数时,实现上下滚动效果        if len(lines) > max_lines:            display.text(x, line_y - font_height * (len(lines) - max_lines), line)        # 更新显示    display.show()        # 滚动文本    x -= scroll_speed        # 当文本超出左侧屏幕外时,重置x位置    if x < -(len(text) * font_width):        x = display.width        # 延时    machine.delay(50)希望这次能顺利运行!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-20 19:01:09 | 显示全部楼层

TypeError: can't convert 'int' object to str implicitly
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-20 19:01:20 | 显示全部楼层
yc0526vip 发表于 2023-12-20 19:01
TypeError: can't convert 'int' object to str impli ...

非常抱歉,我之前的代码中有一个错误。在显示文本时,需要将整数类型的`line_y`变量转换为字符串类型。修正后的代码如下所示:import machineimport ssd1306# 初始化I2C总线和SSD1306显示屏i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))display = ssd1306.SSD1306_I2C(128, 64, i2c)# 要显示的字符串text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"# 文本显示位置和滚动速度x = 0y = 0scroll_speed = 1# 设置字体大小font_width = 6font_height = 8# 计算可以容纳的最大字符数和行数max_chars_per_line = display.width // font_widthmax_lines = display.height // font_height# 循环显示文本while True:    # 清空显示屏    display.fill(0)        # 分割文本为多行    lines = [text[i:i+max_chars_per_line] for i in range(0, len(text), max_chars_per_line)]        # 按行显示文本    for line_index, line in enumerate(lines):        # 计算当前行的y坐标        line_y = y + line_index * font_height                # 显示文本        display.text(x, line_y, str(line))                # 当超出可显示的行数时,实现上下滚动效果        if len(lines) > max_lines:            display.text(x, line_y - font_height * (len(lines) - max_lines), str(line))        # 更新显示    display.show()        # 滚动文本    x -= scroll_speed        # 当文本超出左侧屏幕外时,重置x位置    if x < -(len(text) * font_width):        x = display.width        # 延时    machine.delay(50)请尝试使用这段修正后的代码。如果还有问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表