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

博主使用树莓派Pico、0.9寸OLED显示屏和ESP32蓝牙模块,创建了一个硬件版的ScrollDigitalNote。通过Thonny编程并利用BluetoothController进行通信,实现了通过蓝牙控制OLED屏幕显示内容。遇到的问题是蓝牙模块电源需用VBUS供电,并详细列出了接线配置。代码中强调了在PICO上运行的严格性,提供了代码示例和不同指令的功能,如开关LED、清除和添加显示数据。

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

前提

硬件

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

软件

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

接线

  • 我这里主要说一下蓝牙模块吧,拆坑有点久,就是电源3.3V带不动,要用最大的电源VBUS。串口还是要按Pico的接口来选,不要随便连接。
模块接口PICO对应针脚
蓝牙VCCVBUS
蓝牙GNDGND
蓝牙RXGP17
蓝牙TXGP16
OLED-VCC3V3
OLED-GNDGND
OLED-SCLGP21
OLED-SDAGP20
  • PiCO 引脚说明

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值