文章目录
- 我这里主要说一下蓝牙模块吧,拆坑有点久,就是电源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 引脚说明
- 感觉硬件上的代码编写要比软件严格多了,同一个代码在电脑上能运行不代表单独在单排机上也能运行。我这下面的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查看。

最近买了树莓派Pico+OLED1602和一个蓝牙ESP32就想着能能搞点小东西,就尝试了一下硬件版的ScrollDigitalNote ,看看能不能搞出来,目前只是一个小的demo吧!
- 树莓派pico
- 0.9寸OLED显示屏
- ESP32 蓝牙WIFI模块
- Thonny:用于编程上传代码
- Buletooth Controller:用于和蓝牙模块进行通信
- 我这里主要说一下蓝牙模块吧,拆坑有点久,就是电源3.3V带不动,要用最大的电源
VBUS。串口还是要按Pico的接口来选,不要随便连接。
VBUS。串口还是要按Pico的接口来选,不要随便连接。| 模块接口 | PICO对应针脚 |
|---|---|
| 蓝牙VCC | VBUS |
| 蓝牙GND | GND |
| 蓝牙RX | GP17 |
| 蓝牙TX | GP16 |
| OLED-VCC | 3V3 |
| OLED-GND | GND |
| OLED-SCL | GP21 |
| OLED-SDA | GP20 |
- PiCO 引脚说明

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