最近买了树莓派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 引脚说明
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/photo/raspberry.mp4查看。