跳到主要内容

搭配 Jetson 使用

硬件连接​

连接Jetson Nano的时候,选择用7PIN排线连接,请参考下方的引脚对应表格

树莓派连接引脚对应关系

OLEDJetson NanoJetson Nano
BCM编码Board物理引脚序号
VCC3.3V3.3V
GNDGNDGND
DINMOSI / SDA19 / 3
CLKSCLK / SCL23 / 5
CSCE024
DC2522
RST2713
  • 四线SPI接线图

1

开启SPI和I2C接口​

  • 打开Jetson Nano终端,按照以下步骤打开SPI

OLED1in54 Jetson Nano1

OLED1in54 Jetson Nano2

OLED1in54 Jetson Nano3

I2C同理,打开Jetson Nano终端,按照以下步骤打开I2C

安装库​

  • 安装Python函数库

    #python2
    sudo apt-get update
    sudo apt-get install python-pip
    sudo apt-get install python-pil
    sudo apt-get install python-numpy
    sudo pip install Jetson.GPIO
    sudo pip install spidev
    sudo apt-get install python-smbus
    #python3
    sudo apt-get update
    sudo apt-get install python3-pip
    sudo apt-get install python3-pil
    sudo apt-get install python3-numpy
    sudo pip install Jetson.GPIO
    sudo pip3 install spidev
    sudo apt-get install python3-smbus

下载测试程序​

打开Jetson Nano终端,执行:

sudo apt-get install p7zip-full
sudo wget https://www.waveshare.net/w/upload/2/2c/OLED_Module_Code.7z
7z x OLED_Module_Code.7z -o./OLED_Module_Code
cd OLED_Module_Code/RaspberryPi

运行测试程序​

以下命令请在Jetson Nano目录下执行,否则索引不到目录;

Python​

  • 进入python程序目录

    cd python/example
  • 运行对应型号OLED的例程 ,程序支持python2/3

假如 你购买了1.54inch OLED Module,请输入:

# python2
sudo python OLED_1in54_test.py
# python3
sudo python3 OLED_1in54_test.py
  • 型号指令对应表

    #1.54inch OLED Module
    sudo python OLED_1in54_test.py
    ------------------------------------
    #2.42inch OLED Module
    sudo python OLED_2in42_test.py
  • 请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查

Python​

适用于python和python3

config.py​

  • 接口选择

    Device_SPI = 1
    Device_I2C = 0
    注意:切换SPI/I2C修改这里
  • 模块初始化与退出的处理:

    def module_init()
    def module_exit()
    注意:
    1.这里是处理使用液晶屏前与使用完之后一些GPIO的处理。
    2.module_init()函数会在液晶屏的init()初始化程序自动调用,但module_exit()需要自行调用
  • SPI写数据

    def spi_writebyte(data)
  • IIC写数据

    i2c_writebyte(reg, value):

main.py​

主函数,如果你的python版本是python2,在linux命令模式下重新执行如下:

sudo python main.py

如果你的python版本是python3,在linux命令模式下重新执行如下:

sudo python3 main.py

画图GUI​

由于python有一个image库pil官方库链接,他十分的强大,不需要像C从逻辑层出发编写代码,可以直接引用image库进行图像处理,以下将以1.54inch OLED为例,对程序中使用了的进行简要说明

  • 需要使用image库,需要安装库

    sudo apt-get install python3-pil 安装库

然后导入库

from PIL import Image,ImageDraw,ImageFont

其中Image为基本库、ImageDraw为画图功能、ImageFont为文字

  • 定义一个图像缓存,以方便在图片上进行画图、写字等功能

    image1 = Image.new("1", (disp.width, disp.height), "WHITE")

第一个参数定义图片的颜色深度,定义为"1"说明是一位深度的位图,第二个参数是一个元组,定义好图片的宽度和高度,第三个参数是定义缓存的默认颜色,定义为“WHITE”。

  • 创建一个基于image1的画图对象,所有的画图操作都在这个对象上

    draw = ImageDraw.Draw(image1)
  • 画线

    draw.line([(0,0),(127,0)], fill = 0)

第一个参数为一个4个元素的元组,以(0,0)为起始点,(127,0)为终止点,画一条直线,fill="0"表示线为白色。

  • 画框

    draw.rectangle([(20,10),(70,60)],fill = "WHITE",outline="BLACK")

第一个参数为一个4个元素的元组,(20,10)矩形左上角坐标值,(70,60)为矩形右下角坐标值,fill= "WHITE"表示内部填充黑色,outline="BLACK"表示外边框为黑色。

  • 画圆

    draw.arc((150,15,190,55),0, 360, fill =(0,255,0))

在正方形内画一个内切圆,第一个参数为一个4个元素的元组,以(150,15)为正方形的左上角顶点,(190,55)为正方形右下角顶点,规定矩形框的水平中位线为0度角,角度顺时针变大,第二个参数表示开始角度,第三个参数标识结束角度,fill = 0表示线为白色
如果不是正方形,画出来的就是椭圆,这个实际上是圆弧的绘制。

除了arc可以话圆之外,还有ellipse可以画实心圆

draw.ellipse((150,65,190,105), fill = 0)

实质是椭圆的绘制,第一个参数指定弦的圆外切矩形,fill = 0表示内部填充颜色为白色,如果椭圆的外切矩阵为正方形,椭圆就是圆了。

  • 写字符

写字符往往需要写不同大小的字符,需要导入ImageFont模块,并实例化:

Font1 = ImageFont.truetype("../Font/Font01.ttf",25)
Font2 = ImageFont.truetype("../Font/Font01.ttf",35)
Font3 = ImageFont.truetype("../Font/Font02.ttf",32)

为了有比较好的视觉体验,这里使用的是来自网络的免费字体,如果是其他的ttf结尾的字库文件也是支持的。
注:每字库包含的字符均有不同;如果某些字符不能显示,建议根据字库使用的编码集来使用
写英文字符直接使用即可,写中文,由于编码是GB2312所以需要在前面加个u:

draw.text((5, 68), 'Hello world', fill = 0, font=Font1)
text= u"微雪电子"
draw.text((5, 200), text, fill = 0, font=Font3)

第一个参数为一个2个元素的元组,以(5,68)为左顶点,字体为font1,点,fill为字体颜色, fill = 0,所以会显示字体颜色为白色,第二句显示微雪电子,字体颜色为白色。

  • 读取本地图片

    image = Image.open('../pic/pic.bmp')

参数为图片路径。

  • 其他功能

python的image库十分强大,如果需要实现其他的更多功能,可以上官网学习http://effbot.org/imagingbook pil,官方的是英文的,如果感觉对你不友好,当然我们国内也有很多的优秀的博客都有讲解。