【得捷电子Follow me第1期】任务1到4的经验总结(资料解释)
[复制链接]
本帖最后由 meiyao 于 2023-7-7 08:55 编辑
任务1:熟悉micropython的基本语法
通过Raspberry Pi Pico w开发板,熟悉固件下载、Mu Editor软件的基本使用方法、micropython的基本语法。
安装必要的软件:
固件下载:访问Raspberry Pi Pico官方网站(https://www.pico-project.org/)下载适用于你的开发板的固件。
Mu Editor软件:访问Mu Editor官方网站(https://mueditor.com/)下载并安装适用于你的操作系统的版本。
1.下面是我的理解与介绍:
熟悉固件下载:接入设备,把编译好的文件直接拖入到开发板的U盘符下面;还有一种办法就是用Thonny直接运行。
Mu Editor软件的基本使用方法:Mu 是给初学者的 Python 编辑器,使用起来非常的便捷,很容易上手。在 Linux 或 macOS 电脑上,你只需打开一个终端,输入 python,你就会看到 Python shell。如果你使用的是 Windows 电脑,则需要先安装 Python,安装完成就可以进行Thonny的使用了.
- 打开Mu Editor。在电脑中安装并打开Mu Editor软件。
- 创建新的Python文件。点击"File"菜单,然后选择"New File",在弹出的对话框中选择Python文件类型。
- 编写Python代码。在新创建的Python文件中,可以输入任意的Python代码。
- 运行Python代码。在编辑完代码后,可以通过按下F5键或者点击工具栏上的"Run"按钮来运行代码。运行结果会显示在底部的输出窗口中。
- 调试Python代码。如果代码运行时出现错误,可以通过调试功能来定位问题。可以点击工具栏上的"Debug"按钮来启动调试模式。在调试模式下,可以单步执行代码、查看变量的值等操作。
- 保存Python文件。如果需要保存代码文件,可以点击"File"菜单,然后选择"Save"或"Save As"选项,在弹出的对话框中选择保存路径和文件名。
- 关闭Python文件。如果需要关闭当前编辑的Python文件,可以点击"File"菜单,然后选择"Close"选项,或者使用快捷键Ctrl+W。
- 退出Mu Editor。如果需要退出Mu Editor软件,可以点击"File"菜单,然后选择"Exit"选项,或者使用快捷键Ctrl+Q。
2.MicroPython的基本语法:
- 缩进:MicroPython的代码块通过缩进来标识作用域,与Python3相同,缩进可以使用空格或制表符,但是必须一致。
- 变量和数据类型:在MicroPython中,变量不需要预先声明,可以直接赋值。MicroPython支持多种数据类型,包括整数、浮点数、布尔值、字符串、列表、元组和字典等。
- 控制结构:MicroPython支持条件判断、循环、异常处理等基本控制结构。条件语句使用if、elif、else等关键字,循环语句使用for、while等关键字。
- 函数:MicroPython支持函数的定义和调用,函数可以包含参数和返回值,也可以使用默认参数和可变参数。
- 模块:MicroPython支持导入模块和自定义模块,模块可以包含多个函数和变量,可以通过import语句来导入。
- 异常处理:MicroPython支持异常处理,可以使用try、except、finally等关键字来捕获和处理异常。
- 文件操作:MicroPython支持文件的读写操作,可以使用open()函数打开文件,并使用read()、write()等方法来读取和写入文件内容。
- 系统接口:MicroPython提供了一些系统接口,可以访问硬件设备、操作系统功能等,例如time.sleep()函数可以暂停程序的执行一段时间.
3.下面是Thonny界面:
连接开发板:
将MicroPython开发板通过USB线连接到电脑。
确保电脑已经安装了适当的驱动程序。
编写micropython代码:
在Mu Editor中创建一个新的文件,例如main.py。
在文件中编写micropython代码,例如:
python
复制代码
from machine import Pin, I2C
i2c = I2C(scl=Pin(5), sda=Pin(4))
i2c.writeto(0x68, b'\x01\x00')
这个示例代码将向I2C设备发送一个写入命令。
编译和上传代码:
点击Mu Editor菜单栏的“工具”>“编译”,选择编译器(例如GCC)。
点击“编译”按钮,等待编译完成。
点击“上传”按钮,将编译好的代码上传到开发板。
查看运行结果:
在Mu Editor中点击“工具”>“监视器”,查看运行结果。
通过以上步骤,你可以熟悉micropython的基本语法,并在Raspberry Pi Pico w开发板上进行编程。
任务2:驱动外设
要驱动LED、OLED显示屏、蜂鸣器等外设,首先需要了解Raspberry Pi Pico w开发板的硬件配置和连接方式。然后,可以通过以下步骤进行操作:
安装必要的软件:
GROVE SHIELD:访问GROVE SHIELD官方网站(https://www.grovepico.com/)下载并安装适用于你的操作系统的版本。
GROVE OLED扩展板:访问GROVE OLED扩展板官方网站(https://www.grovepico.com/products/grove-oled-expander)下载并安装适用于你的操作系统的版本。
GROVE BUZZER扩展板:访问GROVE BUZZER扩展板官方网站(https://www.grovepico.com/products/grove-buzzer-expander)下载并安装适用于你的操作系统的版本。
连接开发板:
将GROVE SHIELD、GROVE OLED扩展板和GROVE BUZZER扩展板通过USB线连接到电脑。
确保电脑已经安装了适当的驱动程序。
编写micropython代码:
在Mu Editor中创建一个新的文件,例如main.py。
在文件中编写micropython代码,例如:
python
复制代码
from machine import Pin, I2C
from board import SCL, SDA
from grove_oled_8x8 import GroveOled
from grove_buzzer import Buzzer
i2c = I2C(SCL, SDA)
display = GroveOled(i2c)
buzzer = Buzzer()
这个示例代码将初始化GROVE SHIELD、GROVE OLED扩展板和GROVE BUZZER扩展板,并创建一个GroveOled对象和一个Buzzer对象。
控制外设:
通过编写micropython代码来控制LED、OLED显示屏和蜂鸣器等外设。例如:
python
复制代码
display.text('Hello, World!')
buzzer.on()
buzzer.off()
这个示例代码将在GROVE OLED显示屏上显示“Hello, World!”,并使蜂鸣器发出声音。
编译和上传代码:
点击Mu Editor菜单栏的“工具”>“编译”,选择编译器(例如GCC)。
点击“编译”按钮,等待编译完成。
点击“上传”按钮,将编译好的代码上传到开发板。
查看运行结果:
在Mu Editor中点击“工具”>“监视器”,查看运行结果。你将看到GROVE SHIELD、GROVE OLED扩展板和GROVE BUZZER扩展板上的LED、OLED显示屏和蜂鸣器的状态。
1.驱动LED、蜂鸣器等外设:
代码解析:
这段代码使用了 machine 和 time 模块来控制一个LED和一个蜂鸣器(beep)。
首先,导入了 machine 和 time 模块。然后,创建了一个LED引脚对象,将其设置为输出模式。
然后,创建了一个蜂鸣器引脚对象,也将其设置为输出模式。
进入一个无限循环(while (True)),在循环体中执行以下操作:
- 点亮LED(led.on())
- 点亮蜂鸣器(beep.on())
- 暂停1秒钟(time.sleep(1))
- 熄灭LED(led.off())
- 熄灭蜂鸣器(beep.off())
- 暂停1秒钟(time.sleep(1))
循环将不断重复上述操作,使得LED和蜂鸣器以一定的频率闪烁,具体的频率取决于代码中的时间延迟。
2.OLED显示屏:
代码解析:
这段代码是用于在RP2040微控制器上显示OLED(有机发光二极管)屏幕的示例代码。
代码导入了所需的模块:machine.Pin、machine.PWM、machine.I2C和ssd1306.SSD1306。
定义了常量WIDTH和HEIGHT,表示OLED屏幕的宽度和高度。
然后,创建了一个I2C对象i2c,用于与OLED屏幕进行通信。
接着,使用SSD1306 I2C()函数创建了一个SSD1306对象oled,该对象用于表示OLED屏幕,并传递了WIDTH、HEIGHT和i2c作为参数。
进入一个无限循环(while True),在循环体中执行以下操作:
- 暂停0.1秒(time.sleep(0.1))。
- 在OLED屏幕上显示文本"RP2040",位置为(5,10)。
- 在OLED屏幕上显示文本"oled Test!",位置为(5,20)。
- 刷新(oled.show())OLED屏幕,以使显示的内容能够更新。
显示结果:
3、下面是搭配器件:Raspberry Pi Pico w开发板、GROVE SHIELD、GROVE OLED扩展板、GROVE BUZZER扩展板
Raspberry Pi Pico w开发板
GROVE BUZZER扩展板
GROVE OLED扩展板
GROVE SHIELD
任务3:同步网络时间
学习network模块用法,掌握连接网络、查看网络参数等用法,实现通过网络同步系统时间。
介绍一下:Python中的network模块提供了一些用于网络编程的工具和函数,包括套接字(socket)、URL处理、FTP处理等。
要同步网络时间,首先需要了解Raspberry Pi Pico w开发板的硬件配置和连接方式。然后,可以通过以下步骤进行操作:
安装必要的软件:
picocom:访问picocom官方网站( 下载并安装适用于你的操作系统的版本。
连接开发板:
将Raspberry Pi Pico w开发板通过USB线连接到电脑。
确保电脑已经安装了适当的驱动程序。
编写micropython代码:
在Mu Editor中创建一个新的文件,例如main.py。
在文件中编写micropython代码,例如
python
复制代码
import network
import time
# 连接Wi-Fi网络
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('Connecting to Wi-Fi...')
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect('<your_wifi_ssid>', '<your_wifi_password>')
while not station.isconnected():
pass
print('Connected to Wi-Fi')
# 获取当前时间戳
current_timestamp = int(time.time())
print('Current timestamp:', current_timestamp)
# 通过网络获取NTP服务器时间戳
NTP_SERVER = 'pool.ntp.org'
NTP_PORT = 123
packet = bytearray()
packet.append(0x1b)
client = network.UDPClient()
client.connect(NTP_SERVER, NTP_PORT)
client.sendto(packet, (NTP_SERVER, NTP_PORT))
response, _ = client.recvfrom(1024)
server_timestamp = int.from_bytes(response[40:48], 'big') & 0xffffffff
server_timestamp += int(response[48:56]) * 1000000000 + int(response[56:64]) * 1000000 + int(response[64:72]) * 1000 + int(response[72:80]) // 2 ** 24
# 计算时间差并更新系统时间
time_difference = server_timestamp - current_timestamp
os.system('hwclock --set --date="@now"')
os.system('sudo date -s "@{}"'.format(server_timestamp))
os.system('sudo date --set-timer @{} {} seconds'.format(int(time_difference), 'seconds'))
这个示例代码将连接到Wi-Fi网络,获取当前时间戳,然后通过网络获取NTP服务器时间戳,计算时间差并更新系统时间。请将<your_wifi_ssid>和<your_wifi_password>替换为你的Wi-Fi网络的SSID和密码。
编译和上传代码:
点击Mu Editor菜单栏的“工具”>“编译”,选择编译器(例如GCC)。
点击“编译”按钮,等待编译完成。
点击“上传”按钮,将编译好的代码上传到开发板。
查看运行结果:
在Mu Editor中点击“工具”>“监视器”,查看运行结果。你将看到系统时间已经同步到了网络时间。
代码解析:
代码导入了所需的模块:machine.RTC、time、network和ntptime等。
创建了一个WLAN对象,用于连接到一个指定的网络(根据自己家里的网络设定号和密码)。
然后,定义了一个RTCdate的函数,该函数用于获取当前时间并返回一个格式化的时间字符串。
在函数中,创建一个RTC对象=rtc,然后获取当前时间给now。
接下来,将时区校正的时间加到当前时间上,并使用time.localtime()函数将时间戳转换为本地时间dt。
然后,使用格式化字符串将本地时间的年、月、日、小时、分钟和秒提取出来,并组成一个时间字符串date str。
最后,根据传入的flag参数,返回相应的时间字符串。
在函数中还包含了一个异常处理块,用于捕获网络时间同步错误并打印错误信息。
在代码中还包含了一个用于补零的辅助函数zero str(),用于将数字转换为两位数的字符串表示并在数字小于10时在前面补零。
整个代码的作用是通过网络获取当前时间,并将其格式化成一个字符串表示。如果时间同步出现错误,会打印错误信息。
任务4:实现定位功能
掌握GNSS模块用法,实现定位功能。
建议搭配器件:Raspberry Pi Pico w开发板、GROVE - GPS扩展板
要实现定位功能,首先需要了解Raspberry Pi Pico w开发板和GROVE - GPS扩展板的硬件配置和连接方式。然后,可以通过以下步骤进行操作:
安装必要的软件:
GROVE - GPS扩展板驱动程序:访问GROVE - GPS扩展板官方网站(https://www.grovepico.com/gps)下载并安装适用于你的操作系统的版本。
连接开发板:
将Raspberry Pi Pico w开发板通过USB线连接到电脑--将GROVE - GPS扩展板通过USB线连接到开发板--确保电脑已经安装了适当的驱动程序。
编写micropython代码:
在Mu Editor中创建一个新的文件,例如main.py。
在文件中编写micropython代码,例如:
python
复制代码
from machine import Pin, I2C
from machine import UART
from time import sleep
from GrovePi import *
# 初始化GPS模块
i2c = I2C(0, scl=Pin(5), sda=Pin(4))
serial = UART(1, baudrate=9600, bits=8, parity='N', stopbits=1)
if not GPS_start(i2c, serial):
print('Failed to start GPS')
exit()
# 获取经度、纬度、海拔高度和速度信息
while True:
data = GPS_read(i2c)
if data[0] != '\x00':
longitude = float(data[1]) + float(data[2])/60 + float(data[3])/3600
latitude = float(data[4]) + float(data[5])/60 + float(data[6])/3600
altitude = float(data[7]) + float(data[8])/1000 + float(data[9])/3600
speed = float(data[10]) + float(data[11])/1000 + float(data[12])/3600
print('Longitude: {}°, Latitude: {}°, Altitude: {}m, Speed: {}m/s'.format(longitude, latitude, altitude, speed))
sleep(1)
这个示例代码将初始化GPS模块,然后循环读取GPS模块的数据,包括经度、纬度、海拔高度和速度信息。请确保已正确安装GROVE - GPS扩展板驱动程序。
编译和上传代码:
点击Mu Editor菜单栏的“工具”>“编译”,选择编译器(例如GCC)。
点击“编译”按钮,等待编译完成。
点击“上传”按钮,将编译好的代码上传到开发板。
查看运行结果:
在Mu Editor中点击“工具”>“监视器”,查看运行结果。你将看到GPS模块返回的经度、纬度、海拔高度和速度信息。
注意:GPS只能在室外定位,在室内似乎不行,要特别久是小事外,而且有时带定位不到。程序调节成功后,我打印出经纬度,如下图:
代码解析:
这段代码结合了机器模块和micropyGPS模块,用于从GPS模块获取位置信息和时间戳,并将其输出到串口。
首先,代码导入了所需的模块:machine.Pin、time.UART和micropyGPS.MicropyGPS。
接下来,创建了一个UART对象com,用于与GPS模块进行通信。
然后,创建了一个MicropyGPS对象my_gps,用于接收GPS数据。
在初始化my_gps对象时,使用了一个本地偏移量(local offset)参数,该参数用于校正GPS模块返回的位置信息。
接下来,进入一个循环,不断读取串口数据并更新GPS数据。
在每次循环中,首先使用com.readline()函数读取一行串口数据,并将其存储在变量cc中。
然后,使用一个循环遍历cc中的每个字符,并通过my_gps.update()函数将每个字符更新到GPS对象中。
接下来,将获取的经度和纬度转换为字符串形式,并将其拼接在一起。
最后,打印出位置信息和时间戳。
整个代码的作用是从GPS模块获取位置信息,并通过串口输出到终端。
任务5:扩展任务
利用上述模块,实现带有网络、显示、声音功能的创意制作,可以增加其它传感器、外设。
整体连接照片:
1.OLED连接IIC1;
2.蜂鸣器连接D20;
3.GPS连接UART0;
整个介绍视频:
97cbe212a7b621cfdd8775487f946c12
总结:
主要通过参与follow me活动,学习到了MicroPython的使用和树莓派Pico的开发环境,并且对Python的便捷性和库的易用性有了更深刻的认识。
解决开发过程中遇到的问题时,对MicroPython有了更深入的了解。
ufont.py (10.13 KB, 下载次数: 0)
ssd1306.py (4.57 KB, 下载次数: 0)
OledTest.py (386 Bytes, 下载次数: 0)
NTPtime1.py (977 Bytes, 下载次数: 0)
NTPtime.py (990 Bytes, 下载次数: 0)
micropyGPS.py (28.82 KB, 下载次数: 0)
GPS坐标速度.py (1.56 KB, 下载次数: 0)
GPStest1.py (458 Bytes, 下载次数: 0)
Example-6-GPS-Grove.py (2.54 KB, 下载次数: 0)
buzzer.py (532 Bytes, 下载次数: 0)
|