Adafruit_SSD1306
时间:2022-03-17 01:51:02 | 来源:行业动态
时间:2022-03-17 01:51:02 来源:行业动态
库
接下来用 Adafruit_SSD1306.SSD1306_128_32创建disp对象,里面的参数- rst是Raspberry Pi pin configuration的引脚定义,在这里并不使用(none);
- i2c_bus指定所使用的总线编号,前面说过这里使用的是第二组(i2c_2),但在代码里的编号是1,如果用的是第一组则编号为0;
- gpio表示这个脚位是否被占用?设置为1就表示已占用。
显示屏是以图像方式来处理,第60行 draw.rectangle 是先将显示屏涂黑;从80~85行利用Linux针对CPU、内存、存储空间的检测指令,获取显示的数据,并抽取所需要的内容,分别存入CPU、MemUsage与Disk三个变量里;第89~92行就是显示4组数据,因为显示屏的高度为32像素,而每个字符的高度为8像素,因此只能显示4组数据,这里的字符并不支持中文。在代码里面显示的内容是有线网IP、无线网IP、内存使用状况与存储空间的信息。第95~97行则是将前面四行写入的信息,以图像为单位来现实,每一秒更新一次。下图是这个OLED所显示的内容,与89~92行的输出是一致的。
我们可以尝试修改一下显示的内容,例如有线网IP对Jetbot来说并不重要,但是CPU使用状态是挺有价值的,因此我们可以稍作修改,包含要显示的顺序,例如无线网IP其实只要知道一次就行,可以放到最下面,而内存与CPU的使用状态是相对敏感的,可以将顺位往上调。下面就是修改后的内容:
89
90
91
92
| draw.text((x, top), str(CPU.decode('utf-8')), font=font, fill=255)
draw.text((x, top 25), "wlan0: " str(get_ip_address('wlan0')), font=font, fill=255)
draw.text((x, top 8), str(MemUsage.decode('utf-8')), font=font, fill=255)
draw.text((x, top 16), str(Disk.decode('utf-8')), font=font, fill=255)
|
如果您使用镜像版或者脚本(create-sdcard-image-from-scratch.sh)安装Jetbot,应该修改完存档之后,就会看到OLED屏的显示发生变化。
如果使用容器安装Jetbot的话,这部分需要重建base与display两个容器,需要执行以下步骤让这个改变生效。
$
$
$
$
$
| cd ~/jetbot/docker ./disable.sh
source configure.sh
# 只需要重建base与display两个容器
cd base ./build.sh cd ..
cd display ./build.sh cd ..
./enable.sh $HOME/jetbot
|
重新启动Jetbot容器之后,就会看到显示屏上的内容已经改变(如下图),这样就能轻松改变OLED的显示内容。
事实上还有很多方式可以操作I2C对OLED的显示处理,在Adafruit所提供的开源项目https://github.com/adafruit/Adafruit_Python_SSD1306下面有些范例代码可以尝试,不过操作前先把Jetbot容器关闭,否则I2C会被占用。
现在对Jetson Nano(含2GB)的I2C检测与操作应该有更进一步的了解,这些内容也适用于Jetson系列其他开发套件,主要差别就是得确认所要使用的I2C编号,例如在Xavier AGX上相同位置的I2C是第9组,因此得在代码中修改 i2c_bus=8,其他部分则完全一样。[完]