934|1

426

帖子

4

TA的资源

纯净的硅(初级)

楼主
 

【得捷电子Follow me第1期】规定动作1-2-3-4 [复制链接]

  本帖最后由 北方 于 2023-5-11 14:44 编辑

得捷电子活动的规定动作

 

1、概述

   感谢得捷电子和EEworld共同推出的活动,展示和记录以Raspberry Pi Pico W为核心的学习过程。在 Raspberry Pi Pico 基础上增加了一个经过认证的2.4GHz 802.11n无线模块,使其成为需要无线通信项目的理想解决方案。

  通过以下的四个基本测试,可以完成快速了解的过程,从而准备完成自由设定的任务。

2、硬件

   本次活动用到的硬件有5项

2.1 主控板:Raspberry Pi Pico w ——RP2040 收发器; 802.11 b/g/n(Wi-Fi,WiFi,WLAN) 2.4GHz 评估板,具有以下功能。

• 采用了 Raspberry Pi 官方自主设计的 RP2040 微控制器芯片, 搭载了双核 ARM Cortex M0 + 处理器,运行频率高达 133MHz 灵活时钟(可超频)
• 内置了 264KB 的 SRAM 和 2MB 的片上 Flash
• 板载2.4GHz无线接口芯片(802.11n或Wifi4), 支持蓝牙 5.2
• USB1.1 主机和设备支持
• 多达 26 个多功能的 GPIO 引脚
• 2 个 SPI,2 个 I2C,2 个 UART,3 个 12 位 ADC,16 个可控 PWM 通道
• 精确的片上时钟和定时器, 温度传感器
2.2 扩展板:103100142——方便将pico w开发板的信号引出,连接到各种 grove 设备
2.3 屏幕:104020208——I2C接口 单色 OLED显示屏,可以通过编程显示各种文字、图案
2.4 外设1:107020000——蜂鸣器,可以通过GPIO驱动发出声音
2.5 外设2:109020022——高性能、高集成度、低功耗的多模卫星定位导航模块,支持GPS/北斗/Galileo等多种定位系统主控板:Raspberry Pi Pico w ——RP2040 收发器; 802.11 b/g/n(Wi-Fi,WiFi,WLAN) 2.4GHz 评估板

3、规定的基本任务

3.1 任务1:熟悉thonny软件与micropython的基本语法

3.1.1 基于Rpi Pico W的开发工具有很多选择,其中thonny是最便捷和快速的,安装方法简单,在已经安装好python的电脑上,使用如下pip命令安装,

pip install thonny

直接输入

thonny

就可以启动,进入如下GUI的界面

这个工具分为上下两个主视窗,上面的是代码编辑区域,下面是输出区域。右下角的硬件状态显示当前的软件和硬件状态,即可以用本地python调试运行,也可以直接在PICO的硬件平台上编辑后运行

3.1.2 更新Miropython固件

https://datasheets.raspberrypi.com/soft/micropython-firmware-pico-w-290622.uf2,下载固件micropython-firmware-pico-w-290622.uf2,

然后,按着PICO板上的BootSEL键插入USB接口上电,这时会显示为USB优盘模式,把micropython-firmware-pico-w-290622.uf2拖拽入这个新增的优盘,就实现了固件更新和下载的过程,

复制完这个新增的优盘就消失了,但是,已经启动了miropython固件,可以现在选择在PICO上开发和使用了。

3.1.3 MicroPython的语法和使用

MicroPython是标准python语句的一个子集,可以在https://micropython.org/help/ 这个官网上查到使用的说明和更新的手册。

具体到Pico开发板,有专门的页面,在标准库之外,还列出了完整的外设库

具体有如下库可以执行对硬件的访问,

  • General board control

  • Delay and timing

  • Timers

  • Pins and GPIO

  • Programmable IO (PIO)

  • UART (serial bus)

  • PWM (pulse width modulation)

  • ADC (analog to digital conversion)

  • Software SPI bus

  • Hardware SPI bus

  • Software I2C bus

  • Hardware I2C bus

  • I2S bus

  • Real time clock (RTC)

  • WDT (Watchdog timer)

  • OneWire driver

  • NeoPixel and APA106 driver

这样的资料也可以在https://www.raspberrypi.com/documentation/microcontrollers/这里找到。

简单设定主频的代码如下

import machine

machine.freq()          # get the current frequency of the CPU
machine.freq(240000000) # set the CPU frequency to 240 MHz

点击保存,可以在Pico开发板上保存,并在上电后自动运行。

3.1.4 任务一小结

基于Raspberry Pico W的micropython固件更新及开发,使用thonny就可以快速完成,避免了复杂过程,快捷有效。

 

3.2 任务2:驱动外设
本任务使用的搭配器件:有Raspberry Pi Pico w开发板、GROVE SHIELD、GROVE OLED扩展板、GROVE BUZZER扩展板

3.2.1 驱动LED

本任务驱动板载LED,直接调用外设库machine,然后对led直接写入数值,加上延时函数就可以简单完成,代码如下,

import machine
import time
led = machine.Pin('LED', machine.Pin.OUT)
while (True):
    led.on()
    time.sleep(.5)
    led.off()
    time.sleep(.5)

显示图片如下,

视频效果如下

webwxgetvideo

LED控制运行成功。

 

3.2.2 驱动OLED显示屏

这里选用的OLED是I2C驱动的0.96点阵128x64的OLED,原理如下,

这样,这款SSD1315驱动,可以直接下载SSD1306驱动使用,
链接已隐藏,如需查看请登录或者注册
, 下载后直接复制到Pico W开发板,

也可以直接在包管理器里面搜索,选择合适的下载,可以直接下载到PicoW开发板

然后的开发就是引用这个库,按照API的说明写代码就好了。连接到I2C0的接口,代码如下,

# OLED test
# Display Image & text on I2C driven ssd1306 OLED display 
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf

WIDTH  = 128                                            # oled display width
HEIGHT = 64                                             # oled display height

i2c = I2C(0)                                            # Init I2C using I2C0 defaults, SCL=Pin(GP9), SDA=Pin(GP8), freq=400000
print("I2C Address      : "+hex(i2c.scan()[0]).upper()) # Display device address
print("I2C Configuration: "+str(i2c))                   # Display I2C config


oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)                  # Init oled display
# Raspberry Pi logo as 32x32 bytearray
buffer = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|?\x00\x01\x86@\x80\x01\x01\x80\x80\x01\x11\x88\x80\x01\x05\xa0\x80\x00\x83\xc1\x00\x00C\xe3\x00\x00~\xfc\x00\x00L'\x00\x00\x9c\x11\x00\x00\xbf\xfd\x00\x00\xe1\x87\x00\x01\xc1\x83\x80\x02A\x82@\x02A\x82@\x02\xc1\xc2@\x02\xf6>\xc0\x01\xfc=\x80\x01\x18\x18\x80\x01\x88\x10\x80\x00\x8c!\x00\x00\x87\xf1\x00\x00\x7f\xf6\x00\x008\x1c\x00\x00\x0c \x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
#buffer = bytearray(b"\x00  \x00  \x00  \x00  \x00  \x00  \x00  \x00     \x00  \x00  \x00  \x00  \x00  \x00  \x00  \x00      \x00  \x00  \x00  \x00  \x00  \x00  \x00  \x00      \x00  \x00  \x00  \x00  \x00  \x00  \x00  \x00      \x00  \x00  \x00  \x7f  \xff  \x00  \x00  \x00      \x00  \x00  \x1f  \xff  \xff  \xfc  \x00  \x00      \x00  \x41  \xff  \xff  \xff  \xff  \xc0  \x00      \x01  \x07  \xff  \xff  \xff  \xff  \xf8  \x00      \x02  \x3f  \xff  \xff  \xff  \xff  \xfe  \x00      \x08  \x7f  \xff  \xff  \xff  \xff  \xff  \x80      \x11  \x81  \x9f  \xf3  \xe6  \x1f  \xff  \xc0      \x23  \x80  \x0f  \xe3  \xc4  \x3f  \xff  \xf0      \x07  \x80  \xdf  \xfb  \xc4  \x7f  \xff  \xf8      \x4f  \x19  \x10  \x03  \xc0  \xc0  \x08  \xf8      \x1f  \x11  \x00  \x23  \xc1  \x80  \x08  \xfc      \x1f  \x10  \x02  \x00  \x03  \x88  \x08  \x00")
    
# Load the raspberry pi logo into the framebuffer (the image is 32x32)
fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB)

# Clear the oled display in case it has junk on it.
oled.fill(0)

# Blit the image from the framebuffer to the oled display
oled.blit(fb, 96, 0)

# Add some text
oled.text("Raspberry Pi",5,5)
oled.text("Pico",5,15)

# Finally update the oled display so the image & text is displayed
oled.show()


运行结果如下,对应I2C的编号和通道参数,

照片如下,

OLED显示控制成果,其中自己制作了得捷的logo做成buff文件,显示代码有误,还需要再找找明确的说明才好。因为看源代码有文件头的description,含义待定。

 

3..2.3 驱动蜂鸣器
    驱动蜂鸣器,可以用直接用pwm的驱动控制实现,因为语音的感受程度在20Hz~2000Hz之间,完全在PWM驱动范围内无压实现,这个范例实现的是频率从200Hz到2400Hz的逐步变化,到最高之后再从最低开始重新升高频率。代码如下,

import machine
import time
pizzo = machine.Pin(20)
pwm1 = machine.PWM(pizzo)
frep1 = 100
pwm1.freq(frep1)
pwm1.duty_u16(32768)
while True:
    frep1 += 100
    pwm1.freq(frep1)
    time.sleep(.5)
    if frep1 > 2400:
        frep1 = 200

硬件连接有了grove开发板,就变得极其简单,如下,其中GROVE接口上有编号,这里选择了D20端子对应Pizzo的SIG信号线,运行通过。

 

3.3同步网络时间

3.3.1 同步网络时间,主要是学习网络的连接和参数查看等方法,网络同步时间是其中的应用。网络同步时间是专门提供一个网络时间同步服务器,不断给访问提供时间反馈和时间戳,这样,发送者从发送和接受的时间对比,可以比较精确地算出网络时延补偿,减去反馈的时间戳就是实际时间。这个就是ntp协议的主要内容。这个功能可以自己计算,也可以直接引入包。

这个功能,只用Raspberry Pi Pico w开发板就可以实现的。

3.3.2 network模块用法

Network模块是标准库,具体用法参加https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf

总体来说,这个和arduino的wifi库相似,都是高度封装,只需要输入联网热点数据,依次执行连接,就可以读取信息并反馈数据。具体示例如下。

3.3.3 连接网络、查看网络参数等用法,

首先建立一个秘密代码文件,把有关认证信息录入。

class code:
    def __init__(self):
        self.ssid = ' '
        self.pwd=' '

然后就可以连接网络

import network
import SECRECODE as sec

import time
#import ntptime

ssid=sec.code()
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid.ssid, ssid.pwd)
while not wlan.isconnected() and wlan.status() >= 0:
    print("Waiting to connect:")
    time.sleep(1)
print(wlan.ifconfig())

这样的连接后,就可以按照wifi协议读取网络数据并输出如MAC地址这样的数据

mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print(mac)
print(wlan.config('channel'))
print(wlan.config('essid'))
print(wlan.config('txpower'))

3.3.4 实现通过网络同步系统时间。
这个采用封装的ntptime,首先在thonny的会话框,如下安装ntptime

import upip
upip.install("ntptime")

然后就可以直接引入并使用,见如下代码

import time
import utime
import machine
import ntptime
ntptime.NTP_DELTA = 3155644800  
ntptime.host = 'ntp1.aliyun.com'
ntptime.settime()  

print( time.localtime(time.time()))
rtc = machine.RTC()
while True:
    t = rtc.datetime()
    print(t)
    time.sleep(5)

 

3.4 实现定位功能
3.4.1 掌握GNSS模块用法

器件:Raspberry Pi Pico w开发板、GROVE - GPS扩展板

GNSS是GPS定位功能,这个是Air530模块支持的全球定位系统模块,这个模块是通过UART串口进行数据交互的,具体搜索卫星和卫星定位的算法都是在模块内实现的。

在pico W中使用GPS功能,更进一步把UART的AT命令会话过程封装成gps库,可以直接简化读取。

 

3.4.2实现定位功能。
首先需要安装GPS模块,访问

链接已隐藏,如需查看请登录或者注册
,然后下载其中的
链接已隐藏,如需查看请登录或者注册

根据源代码 ,可以直接使用这个文件库

直接读取gps坐标

from machine import Pin
import time
from gps import MicropyGPS
from machine import UART

com = UART(0,baudrate=9600, tx=Pin(0), rx=Pin(1))
my_gps = MicropyGPS(8)
my_gps.local_offset

time.sleep(1)
cc = com.readline()
for x in cc:
        my_gps.update(chr(x))
gps_values = str(my_gps.latitude[0] + (my_gps.latitude[1] / 60)) + ',' + str(my_gps.longitude[0] + (my_gps.longitude[1] / 60))

print(gps_values)

对时间的访问和读取如下

#Print time
timestamp = my_gps.timestamp
hour = timestamp[0]
rtc = str(int(timestamp[0]))+":"+str(int(timestamp[1]))+":"+str(int(timestamp[2]))
print("Time:" + str(rtc))

 

4、小结

   感谢得捷电子提供的完整开发工具和实用的工程包,这样可以避免了很多常见的坑。整个规定动作简单到令人发指,但是背后却凝聚了大量的适配和开发工作。

目测当下的这个Raspberry Pi Pico平台,含Pico W能够做到极简上手,极速开发,非常适合创客和艺术创作者使用。如果不是需要分析背后的代码库的使用和原理,都不像是攻城狮的本行。

那么,这样的平台,吸引者每个人去尝试做一下自选动作,看能够实现什么样的成果。

最新回复

可以说,捷电子提供的这套开发工具和实用的工程包确实很给力   详情 回复 发表于 2023-5-11 22:04
点赞 关注
 
 

回复
举报

6809

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

可以说,捷电子提供的这套开发工具和实用的工程包确实很给力

 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表