接外包,有相关需求的可以联系我:Telegram | Email

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

该文章创建(更新)于04/1/2022,请注意文章的时效性!

最近买了树莓派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!")

演示



👇 Share | 分享 👇


要不赞赏一下?

微信
支付宝
PayPal
Bitcoin

版权声明 | Copyright

除非特别说明,本博客所有作品均采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明转自-
https://www.emperinter.info/2022/04/01/how-to-use-raspberry-pico-with-oled-screen-and-bluetooth/


要不聊聊?

我相信你准备留下的内容是经过思考的!【勾选防爬虫,未勾选无法留言】

*

*



微信公众号

👉 NewsLetter ❤️ 邮箱订阅 👈

优惠码