当前位置 博文首页 > lyndon:树莓派,摄像头拍照,OLED 显示

    lyndon:树莓派,摄像头拍照,OLED 显示

    作者:[db:作者] 时间:2021-08-23 16:20

    摄像头的使用

    配置系统使能摄像头功能

    pi@raspberrypi:~ $ sudo raspi-config
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    配置完成后,系统会提示重启,重启完成后,摄像头就可以使用了

    简单测试一下

    pi@raspberrypi:~ $ raspistill -v -o test.jpg
    

    在这里插入图片描述
    还可以录视频

    pi@raspberrypi:~ $ raspivid -o test.h264 -t 5000
    

    OLED 的使用

    我使用的 OLED 是 IIC 接口的,连线比较简单,如下:
    在这里插入图片描述
    同样是使能系统的 IIC 功能

    pi@raspberrypi:~ $ sudo raspi-config
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    硬件连好之后,使用命令检测系统是否能够识别到 IIC 设备

    pi@raspberrypi:~ $ sudo i2cdetect -y -a 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    

    3c 就是我们 OLED 屏幕的 IIC 地址,说明硬件连接正确。

    下面我们使用 Python 让 OLED 显示图像,我们使用的是 Adafruit_Python_SSD1306 库,因为我们的 OLED 的驱动芯片是 SSD1306
    在这里插入图片描述

    git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
    

    这里面有一些例子,我们可以测试下:

    $ cd Adafruit_Python_SSD1306/examples/
    $ python3 shapes.py
    

    在这里插入图片描述
    可以看到图像显示成功了😏,不过我们发现 hello world 显示的有点不太清晰。那是因为,代码里默认使用的是 128 x 32 的分辨率,我们给他改成 128 *64
    在这里插入图片描述

    把 128_32 注释掉,启用 128_64。

    再显示一次

    $ cd Adafruit_Python_SSD1306/examples/
    $ python3 shapes.py
    

    在这里插入图片描述
    这样就显示正常了。
    这个库里面还有显示图像、系统信息的例子,大家可以自行测试一下。

    摄像头 + OLED

    我们把 Adafruit 中显示图像的例子稍微修改一下,让 OLED 显示摄像头拍摄的图像
    image.py

    # 128x64 display with hardware I2C:
    disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
    
    # Initialize library.
    disp.begin()
    
    # Clear display.
    disp.clear()
    disp.display()
    
    while True:
    	# take a photo
        os.system("raspistill -o photo.png -w 128 -h 64 -t 3000")
        # Load image based on OLED display height.  Note that image is converted to 1 bit color.
        image = Image.open('photo.png').convert('1')
    
        # Display image.
        disp.image(image)
        disp.display()
        time.sleep(1)
    

    代码很简单,拍摄一张照片 photo.png,然后显示在 OLED 上。
    不由得感叹 Python 就是好啊,几乎不要写多少代码,就能实现很多功能(当然,主要得益于大神们的轮子)。这些内容要放在单片机上,得写摄像头的驱动、OLED 的驱动,搞不好还要对着数据手册看时序图,甚至需要抓波形图 debug。真是人生苦短,我用 Python 呀!
    放上一张“清晰的”效果图
    在这里插入图片描述

    cs
    下一篇:没有了