如何使用树莓Pico的OLED屏幕和蓝牙?

图片.png

最近买了树莓派Pico+OLED1602和一个蓝牙ESP32就想着能能搞点小东西,就尝试了一下硬件版的ScrollDigitalNote ,看看能不能搞出来,目前只是一个小的demo吧!

前提

硬件

  • 树莓派pico
  • 0.9寸OLED显示屏
  • ESP32 蓝牙WIFI模块

软件

  • Thonny:用于编程上传代码
  • Buletooth Controller:用于和蓝牙模块进行通信

接线

  • 我这里主要说一下蓝牙模块吧,拆坑有点久,就是电源3.3V带不动,要用最大的电源VBUS。串口还是要按Pico的接口来选,不要随便连接。
模块接口 PICO对应针脚
蓝牙VCC VBUS
蓝牙GND GND
蓝牙RX GP17
蓝牙TX GP16
OLED-VCC 3V3
OLED-GND GND
OLED-SCL GP21
OLED-SDA GP20
  • PiCO 引脚说明
图片.png

Code

感觉硬件上的代码编写要比软件严格多了,同一个代码在电脑上能运行不代表单独在单排机上也能运行。我这下面的cmd = uart.readline().decode()如果没写try...except...的话在PICO 上是无法运行的。

  • main.py
import machine
import utime
from ssd1306 import SSD1306_I2C

led_status = 1
data_list = ["Just Be Happy !","Hold On !","Try Your Best !"]

uart = machine.UART(0, baudrate=115200, tx=machine.Pin(16), rx=machine.Pin(17))
#print(uart)

led = machine.Pin(25, machine.Pin.OUT)
sda=machine.Pin(20)
scl=machine.Pin(21)
i2c=machine.I2C(0, sda=sda, scl=scl, freq=400000)
oled = SSD1306_I2C(128, 32, i2c) 

def OLED(string):    
    #一行最多16个字符
    #共3行
    #oled.text('****************', 0, 0)
    # 尝试居中对齐
    if len(string) < 12:
        x = int ((64-len(string)) / 2)
    else:
        x = 0
    oled.text(str(string), x, 10)
    #oled.text('****************', 0, 20)
    oled.show()
    utime.sleep(3)
 
    #oled.fill(1)
    #oled.show()
    # 防止长时间造成的烧屏
    oled.fill(0)
    oled.show()
    utime.sleep(0.1)
    

def sendBigData():
    for x in data_list:
        uart.write(x)
        OLED(str(x))
        
def clearData():
    data_list.clear()
    
def addData(data):
    data_list.append(data)


OLED("HELLO WORLD! ")
led.value(led_status)
utime.sleep(1)

led_status = 0

while True:
    led.value(led_status)
    try:
        cmd = uart.readline().decode()
        OLED("Input:" + str(cmd))
        if cmd == 'on':
            led_status = 1
        elif cmd == 'off':
            led_status = 0
        elif cmd == 'clear' :
            clearData()
        elif cmd == 'del':
            del data_list[-1]
            OLED("Del Last Data !")
        elif cmd == 'add' :
            uart.write("Please Input Your Data In 5 Seconds !\n")
            OLED("Input Your Data ")
            utime.sleep(5)
            try:                
                get = uart.readline().decode()
                addData(get)
                if get in data_list:
                    uart.write("insert successful!")
                    OLED("INSERT OK!")
                else:
                    uart.write("insert failed!")
                    OLED("INSERT FAILED")
            except:
                OLED("No Input !")
        else:
            continue
    except:
        OLED("emperinter")
    sendBigData()


led.value(1)
OLED("Something Wrong!")

如需观看演示视频,请访问: https://www.emperinter.info/2022/04/01/how-to-use-raspberry-pico-with-oled-screen-and-bluetooth/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容