本帖最后由 极致创客 于 2023-6-30 20:32 编辑
树莓派pico通过MQTT接入homeassistant控制板载led
7b243cd04884caf1effe1b4f6ed173b8
任务1:熟悉micropython的基本语法
感谢EEWorld和得捷电子联合举办的本次Follow Me活动,希望与各位电子爱好者共同交流,一起学习RP2040 Pico W 这款开发板。
- 固件下载
首次使用micropython编写代码时,需要烧录micropython固件给树莓派pico,固件如下图所示。
- 开发环境搭建
本次IDE选用MuEditor编辑器,安装包如下图.msi后缀文件,安装过程简单,一路默认选项即可,初次打开时,需要等待初始化完成
其模式选择RP2040,如下图所示
将电脑上的文件拖动到设备上,参考:【得捷电子Follow me第1期】任务1:补充分享下Mu editor如何加载包 - DigiKey得捷电子技术专区 - 电子工程世界-论坛 (eeworld.com.cn)
其中加载和文件功能是将需要的源文件拖动到硬件设备中,
编写完成后点击运行即可。
- Micropython的基本用法
MicroPython,是Python3编程语言的一个完整软件实现,用C语言编写,被优化于运行在微控制器之上。MicroPython是运行在微控制器硬件之上的完全的Python编译器和运行时系统。提供给用户一个交互式提示符(REPL)来立即执行所支持的命令。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块。虽然第一次接触MicroPython,但是有C语言基础,能够快速上手。
micropython的基本语法可以参考相关文档:Pico Python SDK使用手册。
任务2:驱动外设
Raspberry Pico W在PICO的基础上添加了WIFI功能,使用英飞凌(Infineon)CYW43439 添加了板载单频2.4GHz 无线接口 (802.11n),同时保留了 Pico 外形。板载2.4GHz无线接口具有以下特点:
- 无线 (802.11n),单频段 (2.4 GHz)
- WPA3
- 最多支持四个客户端的软接入点
当 MicroPython 第一次启动时,它会等待您连接并告诉它该做什么。您可以将 .py 文件从您的计算机加载到开发板上,但与其交互的更直接的方式是通过所谓的read-evaluate-print loop或 REPL。有两种方法可以连接到这个 REPL;因此可以通过 USB 或通过 Raspberry Pi Pico W GPIO 上的 UART 串行端口与开发板上的 MicroPython 固件通信。
通过shell查看time类函数及其参数如下
以下是间隔2秒点亮熄灭LED
from machine import Pin
import time
led = Pin("LED",Pin.OUT)
while True:
led.value(1)
time.sleep(2)
led.value(0)
time.sleep(2)
任务3:同步网络时间
导入network和ntptime模块
# 在这里写上你的代码 :-)
import machine
import time
import network
import urequests
import ntptime
from machine import RTC
ssid = "chen"
password = "11111111"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print("等待连接")
time.sleep(1)
if wlan.status() != 3:
raise RuntimeError("联网失败")
else:
print("网络已连接")
status = wlan.ifconfig()
print("ip = " + status[0])
r = urequests.get("https://www.digikey.cn/zh")
print(r.status_code)
print(r.headers)
r.close()
def show_local_time(timezone=8):
rtc = RTC()
now = time.time()
now += timezone * 3600
t = time.localtime(now)
print(t)
print(f"{t[0]}-{t[1]:02d}-{t[2]:02d} {t[3]:02d}:{t[4]:02d}:{t[5]:02d}")
print("开始NTP校时...")
ntptime.host = "cn.pool.ntp.org"
ntptime.settime()
print(f"校时后系统时间:")
show_local_time()
获得网络时间为国际标准时间
任务4:实现定位功能
本地定位测试使用Seed推出的Air530模块,支持GPS / Beidou / Glonass / Galileo / QZSS / SBAS等多种定位卫星,功能强大,能够获取经纬度信息,还有时间,速度等信息,但是室内测试效果一般,需要在室外才能获得最佳定位精度。
from machine import UART, Pin
import time
from micropyGPS import MicropyGPS
uart0 = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
time.sleep(0.1)
rxData = bytes()
my_gps = MicropyGPS()
while True:
if uart0.any():
stat = my_gps.update(uart0.read(1).decode("ascii"))
# Note the conversion to to chr, UART outputs ints normally
if stat:
print("Latitude:", my_gps.latitude_string()) #读取经度、纬度信息
print("Longitude:", my_gps.longitude_string())
print("Speed:",my_gps.speed_string("kph"),"or",my_gps.speed_string("mph"),"or", my_gps.speed_string("knot"),) #读取速度信息
print("Date (Long Format):", my_gps.date_string("long")) #读取时间信息
print("Date (Short D/M/Y Format):", my_gps.date_string("s_dmy"))
print("timestamp (Short [H,M,S] Format):", my_gps.timestamp)
stat = None
项目总结
通过本次活动,虽然首次接触micorpython,但是通过学习大佬的帖子,掌握了树莓派Pico w的开发,感谢EEWORD和得捷电子联合举办的本次活动,充分激发了学习单片机的兴趣,同时也拓展了对新事物的了解,希望能够更多的举办类似的活动,
|