[实验] 树莓派 Pico W 点亮 1602 屏、连接 WiFi
本帖最后由 scoopydoo 于 2025-1-21 17:57 编辑一不做二不休,俺要把手里的屏全都点亮一次!
树莓派 Pico W 链连上WiFi 可以有很多玩法,俺的另一块 Pico W 被用于遥控俺的工作台照明灯了,用的 MQTT 协议。
老规矩,上代码 main.py:
import machine
import network
import time
import lcd1602_4bit
# Configure LED Pin as an output pin
led = machine.Pin('LED', machine.Pin.OUT)
# Initialize LCD pins
RS = machine.Pin(17, machine.Pin.OUT)
EN = machine.Pin(18, machine.Pin.OUT)
D4 = machine.Pin(22, machine.Pin.OUT)
D5 = machine.Pin(21, machine.Pin.OUT)
D6 = machine.Pin(26, machine.Pin.OUT)
D7 = machine.Pin(27, machine.Pin.OUT)
disp = lcd1602_4bit.LCD1602(RS, EN, D4, D5, D6, D7)
disp.Clear()
disp.WriteLine('RPi Pico WDHCP', 1)
disp.WriteLine('Connecting ...', 2)
disp.CursorBlink()
# Replace these with your Wi-Fi credentials
SSID = "your_SSID"
PASSWORD = "your_password"
# Connect to Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
# Wait for connection
while not wlan.isconnected():
led.toggle()
time.sleep(0.5)
# Connected
led.value(True)
disp.CursorOff()
disp.SetCursor(1, 0)
# Add extra spaces ensure correct display format
disp.WriteLine(wlan.ifconfig() + 9*" ", 2)
手里这个 1602 屏是并口的,在网上找了个 4bit 的驱动代码,基本没改,就加了最后那一小段设置光标位置的代码 lcd1602_4bit.py:
import utime
class LCD1602:
def __init__(self, RS, EN, D4, D5, D6, D7):
self.RS = RS
self.EN = EN
self.D4 = D4
self.D5 = D5
self.D6 = D6
self.D7 = D7
self.Reset()
def Reset(self):
self.RS.value(0)
self.WriteCommand(0x03)
self.WriteCommand(0x03)
self.WriteCommand(0x03)
#Initialize LCD into 4 bit mode
self.WriteCommand(0x02)
#Enable 5x7 character mode
self.WriteCommand(0x28)
#Cursor off
self.WriteCommand(0x0C)
#Increment cursor
self.WriteCommand(0x06)
#Clear screen
self.WriteCommand(0x01)
#Sleep for two mSeconds
utime.sleep_ms(2)
# Generate EnablePulse
def EnablePulse(self):
self.EN.value(1)
utime.sleep_us(40)
self.EN.value(0)
utime.sleep_us(40)
# Write a byte to LCD
# Separate into 2 nibbles and then write to LCD
def WriteByte(self, data):
self.D4.value((data & 0b00010000) >>4)
self.D5.value((data & 0b00100000) >>5)
self.D6.value((data & 0b01000000) >>6)
self.D7.value((data & 0b10000000) >>7)
self.EnablePulse()
self.D4.value((data & 0b00000001) >>0)
self.D5.value((data & 0b00000010) >>1)
self.D6.value((data & 0b00000100) >>2)
self.D7.value((data & 0b00001000) >>3)
self.EnablePulse()
# Write a command to LCD
def WriteCommand(self, data):
# Disable Register Select
self.RS.value(0)
# Write Command Byte to LCD
self.WriteByte(data)
# Write a data to LCD
def WriteData(self, data):
# Enable Register Select
self.RS.value(1)
# Write Command Byte to LCD
self.WriteByte(data)
# Disable Register Select
self.RS.value(0)
# Writes a string into Line 1 or Line2
def WriteLine(self, string, line_number):
if(line_number == 1):
self.WriteCommand(0x80)
for x in string:
self.WriteData(ord(x))
if(line_number == 2):
self.WriteCommand(0xC0)
for x in string:
self.WriteData(ord(x))
def Clear(self):
self.WriteCommand(0x01)
self.WriteCommand(0x02)
# Clear screen and put the cursor into Home needs longer time
# Introduce two mSeconds delay
utime.sleep_ms(2)
# Cursor On
def CursorOn(self):
self.WriteCommand(0x0E)
# Cursor Blinking
def CursorBlink(self):
self.WriteCommand(0x0D)
# Cursor Off
def CursorOff(self):
self.WriteCommand(0x0C)
# Set cursor position
def SetCursor(self, row, col):
# Row 0 address starts at 0x00, Row 1 address starts at 0x40
address = col + (0x40 if row else 0x00)
# Set DDRAM address command
self.WriteCommand(0x80 | address)
这WIFI这么丝滑
完全看不出来2片IC
JuncoJet 发表于 2025-1-21 19:58
这WIFI这么丝滑
完全看不出来2片IC
树莓派 Pico W 上面的 WiFi 芯片是英飞凌的 CYW43439,俺对这颗芯片一无所知但是不耽误俺用它,这就是封装的魅力吧! :lol 皮可针不辍 :o 燃鹅多年的 Basic 让我习惯了啥结构体都要写个 End 结尾 :Q 实在是不习惯 Python 有头无尾的语法 :dizzy:
话说皮可也可以用 C 吧大湿 :o washu 发表于 2025-1-22 00:32
皮可针不辍燃鹅多年的 Basic 让我习惯了啥结构体都要写个 End 结尾实在是不习惯 Python 有头无尾的 ...
前两天的实验代码就是用 C 写的啊 ... ;P
http://www.crystalradio.cn/forum.php?mod=viewthread&tid=2176035&extra=page%3D1
页:
[1]