矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 1038|回复: 4

[实验] 树莓派 Pico W 点亮 1602 屏、连接 WiFi

[复制链接]
     
发表于 2025-1-21 17:45:01 | 显示全部楼层 |阅读模式
本帖最后由 scoopydoo 于 2025-1-21 17:57 编辑

一不做二不休,俺要把手里的屏全都点亮一次!

树莓派 Pico W 链连上  WiFi 可以有很多玩法,俺的另一块 Pico W 被用于遥控俺的工作台照明灯了,用的 MQTT 协议。

老规矩,上代码 main.py:
  1. import machine
  2. import network
  3. import time
  4. import lcd1602_4bit

  5. # Configure LED Pin as an output pin
  6. led = machine.Pin('LED', machine.Pin.OUT)

  7. # Initialize LCD pins
  8. RS = machine.Pin(17, machine.Pin.OUT)
  9. EN = machine.Pin(18, machine.Pin.OUT)
  10. D4 = machine.Pin(22, machine.Pin.OUT)
  11. D5 = machine.Pin(21, machine.Pin.OUT)
  12. D6 = machine.Pin(26, machine.Pin.OUT)
  13. D7 = machine.Pin(27, machine.Pin.OUT)

  14. disp = lcd1602_4bit.LCD1602(RS, EN, D4, D5, D6, D7)
  15. disp.Clear()
  16. disp.WriteLine('RPi Pico W  DHCP', 1)
  17. disp.WriteLine('Connecting ...', 2)
  18. disp.CursorBlink()

  19. # Replace these with your Wi-Fi credentials
  20. SSID = "your_SSID"
  21. PASSWORD = "your_password"

  22. # Connect to Wi-Fi
  23. wlan = network.WLAN(network.STA_IF)
  24. wlan.active(True)
  25. wlan.connect(SSID, PASSWORD)

  26. # Wait for connection
  27. while not wlan.isconnected():
  28.     led.toggle()
  29.     time.sleep(0.5)

  30. # Connected
  31. led.value(True)
  32. disp.CursorOff()
  33. disp.SetCursor(1, 0)
  34. # Add extra spaces ensure correct display format
  35. disp.WriteLine(wlan.ifconfig()[0] + 9*" ", 2)

复制代码


手里这个 1602 屏是并口的,在网上找了个 4bit 的驱动代码,基本没改,就加了最后那一小段设置光标位置的代码 lcd1602_4bit.py:
  1. import utime

  2. class LCD1602:
  3.    
  4.     def __init__(self, RS, EN, D4, D5, D6, D7):
  5.         self.RS = RS
  6.         self.EN = EN
  7.         self.D4 = D4
  8.         self.D5 = D5
  9.         self.D6 = D6
  10.         self.D7 = D7
  11.         self.Reset()
  12.    
  13.     def Reset(self):
  14.         self.RS.value(0)
  15.         self.WriteCommand(0x03)
  16.         self.WriteCommand(0x03)
  17.         self.WriteCommand(0x03)
  18.         
  19.         #Initialize LCD into 4 bit mode
  20.         self.WriteCommand(0x02)
  21.         
  22.         #Enable 5x7 character mode
  23.         self.WriteCommand(0x28)
  24.         
  25.         #Cursor off
  26.         self.WriteCommand(0x0C)
  27.         
  28.         #Increment cursor
  29.         self.WriteCommand(0x06)
  30.         
  31.         #Clear screen
  32.         self.WriteCommand(0x01)
  33.         
  34.         #Sleep for two mSeconds
  35.         utime.sleep_ms(2)
  36.      
  37.     # Generate EnablePulse
  38.     def EnablePulse(self):
  39.         self.EN.value(1)
  40.         utime.sleep_us(40)
  41.         self.EN.value(0)
  42.         utime.sleep_us(40)

  43.     # Write a byte to LCD
  44.     # Separate into 2 nibbles and then write to LCD
  45.     def WriteByte(self, data):
  46.        self.D4.value((data & 0b00010000) >>4)
  47.        self.D5.value((data & 0b00100000) >>5)
  48.        self.D6.value((data & 0b01000000) >>6)
  49.        self.D7.value((data & 0b10000000) >>7)
  50.        self.EnablePulse()
  51.       
  52.        self.D4.value((data & 0b00000001) >>0)
  53.        self.D5.value((data & 0b00000010) >>1)
  54.        self.D6.value((data & 0b00000100) >>2)
  55.        self.D7.value((data & 0b00001000) >>3)
  56.        self.EnablePulse()
  57.       
  58.     # Write a command to LCD
  59.     def WriteCommand(self, data):
  60.         # Disable Register Select
  61.         self.RS.value(0)
  62.         # Write Command Byte to LCD
  63.         self.WriteByte(data)
  64.         
  65.     # Write a data to LCD
  66.     def WriteData(self, data):
  67.         # Enable Register Select
  68.         self.RS.value(1)
  69.         # Write Command Byte to LCD
  70.         self.WriteByte(data)
  71.         # Disable Register Select
  72.         self.RS.value(0)
  73.    
  74.     # Writes a string into Line 1 or Line2
  75.     def WriteLine(self, string, line_number):
  76.         if(line_number == 1):
  77.             self.WriteCommand(0x80)
  78.             for x in string:
  79.                 self.WriteData(ord(x))
  80.         if(line_number == 2):
  81.             self.WriteCommand(0xC0)
  82.             for x in string:
  83.                 self.WriteData(ord(x))   

  84.     def Clear(self):
  85.         self.WriteCommand(0x01)
  86.         self.WriteCommand(0x02)
  87.         # Clear screen and put the cursor into Home needs longer time
  88.         # Introduce two mSeconds delay
  89.         utime.sleep_ms(2)

  90.     # Cursor On
  91.     def CursorOn(self):
  92.         self.WriteCommand(0x0E)

  93.     # Cursor Blinking
  94.     def CursorBlink(self):
  95.         self.WriteCommand(0x0D)
  96.         
  97.     # Cursor Off
  98.     def CursorOff(self):
  99.         self.WriteCommand(0x0C)
  100.    
  101.     # Set cursor position
  102.     def SetCursor(self, row, col):
  103.         # Row 0 address starts at 0x00, Row 1 address starts at 0x40
  104.         address = col + (0x40 if row else 0x00)
  105.         # Set DDRAM address command
  106.         self.WriteCommand(0x80 | address)

复制代码


_1211589a.jpg

评分

1

查看全部评分

     
发表于 2025-1-21 19:58:34 | 显示全部楼层
这WIFI这么丝滑
完全看不出来2片IC
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-21 20:30:03 | 显示全部楼层
JuncoJet 发表于 2025-1-21 19:58
这WIFI这么丝滑
完全看不出来2片IC

树莓派 Pico W 上面的 WiFi 芯片是英飞凌的 CYW43439,俺对这颗芯片一无所知但是不耽误俺用它,这就是封装的魅力吧!
回复 支持 反对

使用道具 举报

     
发表于 2025-1-22 00:32:19 | 显示全部楼层
皮可针不辍 燃鹅多年的 Basic 让我习惯了啥结构体都要写个 End 结尾 实在是不习惯 Python 有头无尾的语法

话说皮可也可以用 C 吧大湿
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-1-22 00:34:38 | 显示全部楼层
washu 发表于 2025-1-22 00:32
皮可针不辍  燃鹅多年的 Basic 让我习惯了啥结构体都要写个 End 结尾  实在是不习惯 Python 有头无尾的 ...

前两天的实验代码就是用 C 写的啊 ...

http://www.crystalradio.cn/forum ... &extra=page%3D1
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 00:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表