JetBot系列教程之OLED显示

摘要: JetBot项目使用一个0.91英寸的一个OLED来显示系统的IP和内存等信息。这里我们来看一下OLED显示。
I2C 接口
Jetson nano 板载有两路I2C接口,JetBot上的OLED就是通过I2C接口来操作的。这里我们可以使用i2ctool工具来查看i2C设备。
这里指令最后的参数为1, 表示查看的是i2c总线1的设备,如果参数为0,则查看的是总线0的设备。
1i2cdetect -y -r 1


其中0x3C 就是OLED的i2C设备地址。由于JetBot一开始的项目使用的是SSD1306的0.91inch OLED屏幕,所以提供的OLED函数库是Adafruit_SSD1306. 屏幕的控制程序你可以在jetbot/jetbot/app/stats.py文件中了解。
OLED显示
这里为了不与原OLED的程序冲突,我们连接另一个0.91inch OLED 到Jetson Nano的i2c0接口上做显示测试。
引脚连接关系如下:
Vcc (OLED) -> 3V3 (Jetson)
GND (OLED) -> GND (Jetson)
SDA (OLED) -> I2C0_SDA (Jetson)
SDL (OLED) -> I2C0_SDL (Jetson)
如果你不清楚I2C0接口的引脚具体是哪个,请参考Jetson nano系列教程之GPIO
连接好之后查看i2c总线0所挂载的设备,可以看到有一个0x3C的设备被识别到

由于控制芯片和屏幕规格都一样,所以我们同样直接使用Adafruit_SSD1306函数库来操作OLED. 我们试着去写一个程序显示字符串到OLED上面。


代码情况如下:


开头import需要用到的各个函数,分别是time用来控制睡眠时间等, PIL图形库以及Adafruit__SSD1306

这里注意我们接到的是i2c0总线,所以参数i2c_bus设置为0

1OLED = Adafruit_SSD1306.SSD1306_128_32(rst = None, i2c_bus = 0, gpio = 1)

初始化屏幕并清屏

1OLED.begin()
2OLED.clear()
3OLED.display()

设置字体为默认字体

1font = ImageFont.load_default()

设置屏幕长宽,并创建画布

1width = OLED.width
2height = OLED.height
3image = Image.new( "1", (width, height))

设置刷新区域,并写入字符串,这里调用的是PIL图形库的画图函数

1Draw = ImageDraw.Draw(image)
2Draw.rectangle((0, 0, width, height), outline = 0, fill = 0)
3Draw.text((0, 0), "OLED testing", font=font, fill=255)

最后将内存刷新到屏幕上即可:

1OLED.image(image)
2OLED.display()

声明:

Adafruit_SS1306是Adafruit Electronics 提供的驱动小尺寸OLED屏幕的驱动。有兴趣的可以自行了解一下。

TAG: Arduino UNO R3改进版 DDSM210直驱伺服轮毂电机 一体化 UART串口通信 大扭矩电机 ESP32-C6-WROOM-1-N8 RoArm-M2-S 步骤录制和重现 USB转串口 树莓派Pico 2 RP2350 4寸LCD触摸显示屏480x480 HMI LVGL 带CAN/RS485/I2C传感器接口 树莓派夜视摄像头 树莓派Pico 2 RP2350B RP2350-Linux迷你开发板PSRAM 树莓派1.5寸OLED STM32 SH1107 树莓派Pico 2 RP2350 Plus开发板RP2350A X1009树莓派5 PCIe转5端口SATA硬盘扩展板5个SATA3.0 串口液晶屏 RP2040-PiZero教程 ESP32 S3开发板3.5寸 虾哥小智AIDeepSeek人工智能语音聊天机器人盒子 QSPI高刷 N16R8 QMI8658 6轴/触摸/摄像头 ESP32-S3-Zero程序 RDK X5 PoE模块板载风扇散热片以太网供电扩展板D-Robotics ESP32-S3小智AI双目电子眼睛开发板触摸圆形1.28寸LCD显示屏玩具公仔手办机器人N16R8豆包Deepseek 移动机器人