1048|2

220

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【得捷电子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的使用了.

  1. 打开Mu Editor。在电脑中安装并打开Mu Editor软件。
  2. 创建新的Python文件。点击"File"菜单,然后选择"New File",在弹出的对话框中选择Python文件类型。
  3. 编写Python代码。在新创建的Python文件中,可以输入任意的Python代码。
  4. 运行Python代码。在编辑完代码后,可以通过按下F5键或者点击工具栏上的"Run"按钮来运行代码。运行结果会显示在底部的输出窗口中。
  5. 调试Python代码。如果代码运行时出现错误,可以通过调试功能来定位问题。可以点击工具栏上的"Debug"按钮来启动调试模式。在调试模式下,可以单步执行代码、查看变量的值等操作。
  6. 保存Python文件。如果需要保存代码文件,可以点击"File"菜单,然后选择"Save"或"Save As"选项,在弹出的对话框中选择保存路径和文件名。
  7. 关闭Python文件。如果需要关闭当前编辑的Python文件,可以点击"File"菜单,然后选择"Close"选项,或者使用快捷键Ctrl+W。
  8. 退出Mu Editor。如果需要退出Mu Editor软件,可以点击"File"菜单,然后选择"Exit"选项,或者使用快捷键Ctrl+Q。

2.MicroPython的基本语法:

  1. 缩进:MicroPython的代码块通过缩进来标识作用域,与Python3相同,缩进可以使用空格或制表符,但是必须一致。
  2. 变量和数据类型:在MicroPython中,变量不需要预先声明,可以直接赋值。MicroPython支持多种数据类型,包括整数、浮点数、布尔值、字符串、列表、元组和字典等。
  3. 控制结构:MicroPython支持条件判断、循环、异常处理等基本控制结构。条件语句使用if、elif、else等关键字,循环语句使用for、while等关键字。
  4. 函数:MicroPython支持函数的定义和调用,函数可以包含参数和返回值,也可以使用默认参数和可变参数。
  5. 模块:MicroPython支持导入模块和自定义模块,模块可以包含多个函数和变量,可以通过import语句来导入。
  6. 异常处理:MicroPython支持异常处理,可以使用try、except、finally等关键字来捕获和处理异常。
  7. 文件操作:MicroPython支持文件的读写操作,可以使用open()函数打开文件,并使用read()、write()等方法来读取和写入文件内容。
  8. 系统接口: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)),在循环体中执行以下操作:

  1. 点亮LED(led.on())
  2. 点亮蜂鸣器(beep.on())
  3. 暂停1秒钟(time.sleep(1))
  4. 熄灭LED(led.off())
  5. 熄灭蜂鸣器(beep.off())
  6. 暂停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),在循环体中执行以下操作:

  1. 暂停0.1秒(time.sleep(0.1))。
  2. 在OLED屏幕上显示文本"RP2040",位置为(5,10)。
  3. 在OLED屏幕上显示文本"oled Test!",位置为(5,20)。
  4. 刷新(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)

最新回复

Pico 跑 C++蛮好的   详情 回复 发表于 2023-7-9 13:01
点赞 关注
 
 

回复
举报

6807

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

现在看MicroPython的使用和树莓派Pico的开发环境用处还是比较大的

 
 
 

回复

6105

帖子

4

TA的资源

版主

板凳
 

Pico 跑 C++蛮好的

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表