鱼C论坛

 找回密码
 立即注册
查看: 607|回复: 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":
  1. import machine
  2. import u8g2
  3. # 初始化 SSD1306 显示屏
  4. i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
  5. ssd1306 = u8g2.SSD1306_I2C(128, 64, i2c)
  6. # 设置字体和显示位置
  7. ssd1306.setFont(u8g2.font_6x10_tf)
  8. x = 0
  9. y = 10
  10. # 要显示的字符串
  11. text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"
  12. while True:
  13.     # 清空显示屏
  14.     ssd1306.clearBuffer()
  15.     # 在指定位置显示文本
  16.     ssd1306.setCursor(x, y)
  17.     ssd1306.print(text)
  18.     # 更新显示
  19.     ssd1306.sendBuffer()
  20.     # 滚动文本
  21.     x -= 1
  22.     if x < -(len(text) * 6):
  23.         x = 128
  24.     # 延时
  25.     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上实现自动换行和上下滚动显示文本,您可以使用以下示例代码:
  1. import machine
  2. import ssd1306
  3. # 初始化I2C总线和SSD1306显示屏
  4. i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
  5. display = ssd1306.SSD1306_I2C(128, 64, i2c)
  6. # 要显示的字符串
  7. text = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzZYXWVUTSRQPONMLKJIHGFECBAzyxwvutsrqponmlkjihgfecba0987654321"
  8. # 文本显示位置和滚动速度
  9. x = 0
  10. y = 0
  11. scroll_speed = 1
  12. # 设置字体大小
  13. font_width = 6
  14. font_height = 8
  15. # 计算可以容纳的最大字符数和行数
  16. max_chars_per_line = display.width // font_width
  17. max_lines = display.height // font_height
  18. # 循环显示文本
  19. while True:
  20.     # 清空显示屏
  21.     display.fill(0)
  22.    
  23.     # 分割文本为多行
  24.     lines = [text[i:i+max_chars_per_line] for i in range(0, len(text), max_chars_per_line)]
  25.    
  26.     # 按行显示文本
  27.     for line_index, line in enumerate(lines):
  28.         # 计算当前行的y坐标
  29.         line_y = y + line_index * font_height
  30.         
  31.         # 显示文本
  32.         display.text(x, line_y, line)
  33.         
  34.         # 当超出可显示的行数时,实现上下滚动效果
  35.         if len(lines) > max_lines:
  36.             display.text(x, line_y - font_height * (len(lines) - max_lines), lines[line_index - max_lines])
  37.    
  38.     # 更新显示
  39.     display.show()
  40.    
  41.     # 滚动文本
  42.     x -= scroll_speed
  43.    
  44.     # 当文本超出左侧屏幕外时,重置x位置
  45.     if x < -(len(text) * font_width):
  46.         x = display.width
  47.    
  48.     # 延时
  49.     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-5-20 12:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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