【得捷电子Follow me第1期】+超速报警项目总结报告
[复制链接]
本帖最后由 Snapdragon850 于 2023-6-30 23:58 编辑
一、视频介绍
根据活动要求录制的短视频,主要内容是任务及项目的演示。
【得捷电子Follow me第1期】超速报警-陈海
二、项目描述
1、板卡介绍
板卡是来自树莓派的Pi Pico W,主控芯片是树莓派RP2040,有两颗Cortex-M0+的核心;板载一个WiFi+蓝牙模块。
板卡官方支持MicroPython编程,官网可以下载到对应的固件。
2、各任务介绍
本次活动至少需要完成4个任务,分别是熟悉MicroPython语法、驱动外设、同步网络时间、实现定位功能。除此之外可以选择完成扩展任务。
3、项目介绍
本次活动我完成的项目是超速报警。利用GPS模块的测速功能,配合OLED、蜂鸣器完成显示及报警。
三、各功能对应的主要代码片段及说明
1、蜂鸣器驱动
import time
import machine
buzzer = machine.Pin(20, machine.Pin.OUT)
while True:
buzzer.value(1)
time.sleep(0.5)
buzzer.value(0)
time.sleep(0.5)
如上面的代码所示,先初始化蜂鸣器的IO,然后控制IO电平的高低就可以控制蜂鸣器的状态了。
2、OLED驱动
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
i2c = I2C(0, sda=Pin(8), scl=Pin(9), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
oled.text('Hello World', 0, 0, 1)
oled.show()
如上面的代码所示,先初始化I2C,然后初始化OLED并绑定I2C。此代码的输出结果是在OLED上显示一个Hello World。
3、同步网络时间
import machine
import time
import ntptime
import network
# 无线网络初始化
ssid = "wifi_name"
password = "wifi_passwd"
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
max_wait = 100
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('等待连接')
time.sleep(0.5)
show_loacl_time()
if wlan.status() != 3:
raise RuntimeError('联网失败')
else:
print('网络已连接')
status = wlan.ifconfig()
oled_ip = status[0]
print('ip = ' + oled_ip)
oled_show()
print('开始NTP校时')
ntptime.host = 'ntp3.aliyun.com'
ntptime.settime()
print('校时后系统时间: ')
show_loacl_time()
上图是网络连接并NTP校时的代码,首先使能WLAN功能,再根据WiFi的名称和密码连接到网络,这里最多尝试100次连接;连接成功后进行NTP校时,并显示校时后的时间。
4、实现定位功能
from machine import Pin, UART, I2C, RTC
from micropyGPS import MicropyGPS
# AIR530串口初始化
gps_module = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
gps = MicropyGPS()
while True:
if gps_module.any():
stat = gps.update(gps_module.read(1).decode('ascii'))
if stat:
gps_latitude = gps.latitude[0] + gps.latitude[1] / 60.0
gps_longitude = gps.longitude[0] + gps.longitude[1] / 60.0
gps_speed = gps.speed[2]
oled_coordinate = str(gps_latitude)[0:5] + ", " + str(gps_longitude)[0:5]
oled_speed = str(gps_speed) + " km/h"
show_loacl_time()
if gps_speed > 0.1:
buzzer.value(1)
else:
buzzer.value(0)
time.sleep(0.5)
如上面的代码所示,先初始化GPS模块所在的串口,再实例化一个MicropyGPS的模块。在大循环里面,不断地读取GPS模块,并传输到MicropyGPS模块里面,完成一次完整的数据读取后,读出计算出来的坐标值以及速度值,并显示在OLED模块上面。
四、功能展示及说明
1、校时功能
图1
如图1所示,在未连接网络时,第一行显示wait connect...表示等待WiFi的连接;第二行显示一个默认的时间。
图2
如图2所示,连接好WiFi后会立即进行校时,第二行改为校准后的时间;第三第四行为GPS信息,由于室内无GPS信号,所以显示一个内部的默认值。
2、定位功能
图3
如图3所示,第三行显示当前的坐标信息(经纬度)
3、超速报警功能
图4
如图4所示,晃动定位模块模拟运动后,速度一栏的值有了变化,此时蜂鸣器报警(视频内可以体现)。
五、对本活动的心得体会
首先MicroPython对于我这样一个传统的嵌入式工程师感觉有很强的冲击,之前从未想过有这么一种编程方式。但是目前来说MicroPython还没有经过广泛的验证,只能做些研究性质的使用和开发。
六、源代码
见附件
|