1804|5

5

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第1期】+任务一到四的经验总结 [复制链接]

  本帖最后由 蓝小鹏 于 2023-6-30 20:37 编辑

6月30日

 

■  内容二: 项目总结报告
1. 项目描述(800字左右,注意格式整洁)
2. 各功能对应的主要代码片段及说明

任务1:熟悉micropython的基本语法

安装软件

选择

 

任务2:驱动外设

a.实现了led闪烁

import machine
import utime

led = machine.Pin("LED", machine.Pin.OUT)
while True:
    led.on()
    utime.sleep(1)
    led.off()
    utime.sleep(1)

b.点亮OLED显示屏

先保存ssd1306文件

# MicroPython SSD1306 OLED driver, I2C and SPI interfaces
from micropython import const
import framebuf

# register definitions
SET_CONTRAST = const(0x81)
SET_ENTIRE_ON = const(0xA4)
SET_NORM_INV = const(0xA6)
SET_DISP = const(0xAE)
SET_MEM_ADDR = const(0x20)
SET_COL_ADDR = const(0x21)
SET_PAGE_ADDR = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP = const(0xA0)
SET_MUX_RATIO = const(0xA8)
SET_COM_OUT_DIR = const(0xC0)
SET_DISP_OFFSET = const(0xD3)
SET_COM_PIN_CFG = const(0xDA)
SET_DISP_CLK_DIV = const(0xD5)
SET_PRECHARGE = const(0xD9)
SET_VCOM_DESEL = const(0xDB)
SET_CHARGE_PUMP = const(0x8D)

# Subclassing FrameBuffer provides support for graphics primitives
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
class SSD1306(framebuf.FrameBuffer):
    def __init__(self, width, height, external_vcc):
        self.width = width
        self.height = height
        self.external_vcc = external_vcc
        self.pages = self.height // 8
        self.buffer = bytearray(self.pages * self.width)
        super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
        self.init_display()

    def init_display(self):
        for cmd in (
            SET_DISP | 0x00,  # off
            # address setting
            SET_MEM_ADDR,
            0x00,  # horizontal
            # resolution and layout
            SET_DISP_START_LINE | 0x00,
            SET_SEG_REMAP | 0x01,  # column addr 127 mapped to SEG0
            SET_MUX_RATIO,
            self.height - 1,
            SET_COM_OUT_DIR | 0x08,  # scan from COM[N] to COM0
            SET_DISP_OFFSET,
            0x00,
            SET_COM_PIN_CFG,
            0x02 if self.width > 2 * self.height else 0x12,
            # timing and driving scheme
            SET_DISP_CLK_DIV,
            0x80,
            SET_PRECHARGE,
            0x22 if self.external_vcc else 0xF1,
            SET_VCOM_DESEL,
            0x30,  # 0.83*Vcc
            # display
            SET_CONTRAST,
            0xFF,  # maximum
            SET_ENTIRE_ON,  # output follows RAM contents
            SET_NORM_INV,  # not inverted
            # charge pump
            SET_CHARGE_PUMP,
            0x10 if self.external_vcc else 0x14,
            SET_DISP | 0x01,
        ):  # on
            self.write_cmd(cmd)
        self.fill(0)
        self.show()

    def poweroff(self):
        self.write_cmd(SET_DISP | 0x00)

    def poweron(self):
        self.write_cmd(SET_DISP | 0x01)

    def contrast(self, contrast):
        self.write_cmd(SET_CONTRAST)
        self.write_cmd(contrast)

    def invert(self, invert):
        self.write_cmd(SET_NORM_INV | (invert & 1))

    def show(self):
        x0 = 0
        x1 = self.width - 1
        if self.width == 64:
            # displays with width of 64 pixels are shifted by 32
            x0 += 32
            x1 += 32
        self.write_cmd(SET_COL_ADDR)
        self.write_cmd(x0)
        self.write_cmd(x1)
        self.write_cmd(SET_PAGE_ADDR)
        self.write_cmd(0)
        self.write_cmd(self.pages - 1)
        self.write_data(self.buffer)


class SSD1306_I2C(SSD1306):
    def __init__(self, width, height, i2c, addr=0x3C, external_vcc=False):
        self.i2c = i2c
        self.addr = addr
        self.temp = bytearray(2)
        self.write_list = [b"\x40", None]  # Co=0, D/C#=1
        super().__init__(width, height, external_vcc)

    def write_cmd(self, cmd):
        self.temp[0] = 0x80  # Co=1, D/C#=0
        self.temp[1] = cmd
        self.i2c.writeto(self.addr, self.temp)

    def write_data(self, buf):
        self.write_list[1] = buf
        self.i2c.writevto(self.addr, self.write_list)


class SSD1306_SPI(SSD1306):
    def __init__(self, width, height, spi, dc, res, cs, external_vcc=False):
        self.rate = 10 * 1024 * 1024
        dc.init(dc.OUT, value=0)
        res.init(res.OUT, value=0)
        cs.init(cs.OUT, value=1)
        self.spi = spi
        self.dc = dc
        self.res = res
        self.cs = cs
        import time

        self.res(1)
        time.sleep_ms(1)
        self.res(0)
        time.sleep_ms(10)
        self.res(1)
        super().__init__(width, height, external_vcc)

    def write_cmd(self, cmd):
        self.spi.init(baudrate=self.rate, polarity=0, phase=0)
        self.cs(1)
        self.dc(0)
        self.cs(0)
        self.spi.write(bytearray([cmd]))
        self.cs(1)

    def write_data(self, buf):
        self.spi.init(baudrate=self.rate, polarity=0, phase=0)
        self.cs(1)
        self.dc(1)
        self.cs(0)
        self.spi.write(buf)
        self.cs(1)

输出hello world

from ssd1306 import SSD1306_I2C
from machine import Pin, I2C
from time import sleep

i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=400000)  # Grove - OLED Display 0.96" (SSD1315)

oled = SSD1306_I2C(128, 64, i2c)

while True:
    oled.fill(0)  # clear
    oled.text("Hello,World!", 0, 0)
    oled.show()
    #sleep(0.5)

c.驱动蜂鸣器发出声音

import machine
from machine import Pin
import utime

buzzer = machine.Pin("GP26", machine.Pin.OUT)
while True:
    buzzer.on()
    utime.sleep(1)
    buzzer.off()
    utime.sleep(1)

任务3:同步网络时间

a.wifi实现联网

import network
import time

ssid = 'XXX'
password = 'XXXXX'

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

# Wait for connect or fail
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('waiting for connection...')
    time.sleep(1)

# Handle connection error
if wlan.status() != 3:
    raise RuntimeError('network connection failed')
else:
    print('connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

b.实现同步时间

import network
import time
from time import sleep
from ssd1306 import SSD1306_I2C
from machine import Pin, I2C

ssid = 'XXXXX'
password = 'XXXXX'

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

# Wait for connect or fail
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('waiting for connection...')
    time.sleep(1)

# Handle connection error
if wlan.status() != 3:
    raise RuntimeError('network connection failed')
else:
    print('connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])

import ntptime
def sync_ntp():
     ntptime.NTP_DELTA = 3155644800   # 可选 UTC+8偏移时间(秒),不设置就是UTC0
     ntptime.host = 'ntp1.aliyun.com'  # 可选,ntp服务器,默认是"pool.ntp.org"
     ntptime.settime()   # 修改设备时间,到这就已经设置好了

sync_ntp()

from machine import RTC
from time import sleep

i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=400000)  # Grove - OLED Display 0.96" (SSD1315)
oled = SSD1306_I2C(128, 64, i2c)
oled.fill(0)  # clear
oled.text("NTP Time!", 0, 0)
oled.show()
while True:
    rtc = RTC()
    print(rtc.datetime())
    oled.fill(0)  # clear
    oled.text("NTP Time!", 0, 0)
    s = ','.join(str(i) for i in rtc.datetime())
    oled.text(s, 0, 16)
    oled.show()
    sleep(1)





任务4:实现定位功能

实现定位

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




3. 功能展示

     

最新回复

恭喜完成作业,如果有时间,建议再完善一下,那就更好了。   详情 回复 发表于 2023-7-1 09:20
点赞 关注
 
 

回复
举报

6960

帖子

11

TA的资源

版主

沙发
 

恭喜完成作业,如果有时间,建议再完善一下,那就更好了。

 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
lugl4313820 发表于 2023-7-1 09:20 恭喜完成作业,如果有时间,建议再完善一下,那就更好了。

好的!

 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

4
 

可编程下载的代码

buzzer_music.py

7.51 KB, 下载次数: 0

ddd.py

215 Bytes, 下载次数: 0

GPS.py

1.53 KB, 下载次数: 0

hello world.py

316 Bytes, 下载次数: 0

led.py

183 Bytes, 下载次数: 0

main.py

998 Bytes, 下载次数: 0

micropyGPS.py

29.63 KB, 下载次数: 0

ssd1306.py

4.63 KB, 下载次数: 0

time.py

1.35 KB, 下载次数: 0

wifi.py

572 Bytes, 下载次数: 0

 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

5
 

项目总结报告

大家好!我是来自广东的蓝鹏,很开心能参与到得捷电子Follow me第1期的活动中来,接下来我来介绍一下,这次活动用到的硬件有Raspberry Pi Pico W 


Raspberry Pi Pico W 是树莓派基金会在 2022年推出的新产品,它在 Raspberrypi Pico 基础上增加了一个经过认证的2.4GHz 802.11n无线模块,使其成为需要无线通信项目的理想解决方案。


Raspberry Pi pico W的大小和引脚排列和Raspberry Pi pico 完全相同,可以很容易为旧的应用增加无线功能,将您的项目增加 oT 功能特性,采用了 Raspberry pi 官方自主设计的 RP2040 微控制器芯片,搭载了双核 ARM Cortex MO + 处理器,运行频率高达 133MHz 灵活时钟 (可超),内置了 264KB 的SRAM 和2MB 的片上 Flash,板载2.4GHz无线接口芯片(802.11n或Wifi4)。支持蓝牙 5.2。邮票孔设计,可直接焊接集成到用户自主设计的底板上,USB1.1 主机和设备支持,支持低功耗睡眠和休眠模式。可识别为 USB 大容量存储器进行拖放式程序更新
,多达 26 个多功能的 GPIO 引脚。2个SPI,2个12C,2个UART,3个12位ADC,16 个可控 PWM 通道。精确的片上时钟和定时器ERTEI。温度传感器片上加速浮点库。8 个可编程1/0 (PIO) 状态机,用于自定义外设支持还有主控板::Raspberry Pi pico w--RP2040 收发器 802.11 b/g/n (Wi-Fi,WiF,WLAN) 2.4GHz 评估板:扩展板: 103100142方便将pico w开发板的信号引出,连接到各种 grove:设备屏幕: 1040202082C接口 单色 OLED显示屏,可以通过编程显示各种文字、图案外设1: 107020000-蜂鸣器,可以通过GPIO驱动发出声音:外设2: 109020022一高性能、高集成度、低功耗的多模卫星定位导航模块,支持GPS/北斗/Galileo等多种定位系统

 

应用场景:卫星定位、时钟制作、闹钟、物联网系统等。


参加得捷电子FOLLOW ME线上活动的心得体会和对得捷电子的建议

 

学习Pico W的心得
 
 Pico W是一款小巧便携的微型计算机,它具有强大的功能和可编程性,非常适合初学者学习和实践电子技术。在学习Pico W的过程中,我获得了许多有价值的经验和心得。
 
 首先,深入了解Pico W的硬件结构是非常重要的。Pico W配备了一颗高性能的处理器,拥有丰富的输入输出接口,可以连接各种传感器和执行器。了解这些硬件组件的功能和特性,可以更好地理解和应用Pico W。
 
 其次,学习编程语言是使用Pico W的关键。Pico W支持多种编程语言,包括MicroPython和C++,可以根据个人的喜好和需求进行选择。掌握这些编程语言的基本语法和常用函数,可以编写出满足自己需求的程序。
 
 接下来,学习如何使用Pico W的开发工具是很重要的。Pico W有自己的开发环境和软件库,可以提供丰富的开发资源和调试工具。学会使用这些工具,可以更加高效地开发和调试自己的项目。
 
 此外,学习Pico W的过程中,我也发现了一些学习方法和技巧。首先,阅读相关的教程和文档是非常重要的。Pico W的官方文档和教程提供了详细的说明和示例代码,可以帮助初学者更好地理解和应用Pico W。其次,尝试实践是非常重要的。通过实际的项目实践,认识到自己的误区,并改进。

 

这次参加得捷电子FOLLOW ME线上活动,让我对得捷电子有了更深入的了解,并获得了一些宝贵的经验。在这次活动中,我有以下几点心得体会。

首先,得捷电子的产品技术非常先进。在活动中,我了解到得捷电子是一家专注于研发、生产和销售电子产品的企业。他们的产品涵盖了智能手机、平板电脑、电视等多个领域,且都采用了最新的技术和设计。通过与得捷电子的工程师交流,我对他们的产品技术有了更深入的了解,也感受到了他们对产品质量和用户体验的高度重视。

其次,得捷电子在市场推广方面有着独到的策略。在线上活动中,我注意到得捷电子利用了各种社交媒体平台和网络直播等方式,吸引了大量的参与者。他们通过精心设计的活动内容、优惠福利和抽奖等方式,吸引用户关注并提升了品牌知名度。这种市场推广策略对于企业来说非常重要,我认为得捷电子在这方面已经做得非常出色了。

然而,我也希望能对得捷电子提出一些建议。首先,得捷电子可以进一步加强与用户的互动。在线上活动中,我发现得捷电子虽然与用户进行了一些交流,但与用户的互动还有不足。以及以下几点。

1. 清晰的活动信息:确保活动的日期、时间、地点和参加条件等信息明确易懂。提供详细的活动说明,并在活动网站上发布活动日程表,以帮助参与者更好地了解活动内容和流程。

2. 创造互动体验:为参与者提供一个交流互动的平台,例如通过在线论坛或社交媒体提供与得捷电子团队以及其他参与者交流的机会。鼓励参与者分享他们的经验、观点和问题,并及时回复他们的留言和提问。

3. 提供实用资源:在活动期间,为参与者提供相关的学习资源,如教程、文档、视频或参考资料等。这些资源可以帮助他们更好地了解得捷电子产品,掌握更多有用的知识,并在参加活动期间更好地应用这些知识。

4. 举办互动活动:为了增加活动的趣味性,可以在活动期间组织一些互动活动,如抽奖、问答、比赛或猜谜等。这些活动不仅可以帮助参与者更好地参与其中,还可以激发他们的兴趣,并增强他们对得捷电子产品的关注度。

 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

6
 

对任务的描述 

    本次得捷电子Follow me第一期的任务描述如下

 

任务1:熟悉micropython的基本语法

通过Raspberry Pi Pico w开发板,熟悉固件下载、Mu Editor软件的基本使用方法、micropython的基本语法

搭配器件:Raspberry Pi Pico w开发板

    收到发过来的开发板后,就开始动手组装实践,在论坛上跟随这前辈的帖子一步步的起去下载软件,安装驱动,并在一定程度的去学习去用python语言进行开发,Mu Editor软件的基本使用方法是非常简单,然后万事俱备,就可以开始我们这次的Follow me之旅了。

 

任务2:驱动外设

驱动LED、OLED显示屏、蜂鸣器等外设。

搭配器件:Raspberry Pi Pico w开发板、GROVE SHIELD、GROVE OLED扩展板、GROVE BUZZER扩展板

    这次活动搭载配套的外设也是相当不错的,驱动板载LED进行闪烁,点亮OLED屏幕输出HELLO WORLD,每点亮一个oled屏幕都有一种特别的成就感,蜂鸣器也是相当好玩的,可以发出声音,以前做个闹钟的铃声,现在我使用蜂鸣器演奏两只老虎,是相当的好玩

    

任务3:同步网络时间

学习network模块用法,掌握连接网络、查看网络参数等用法,实现通过网络同步系统时间。

搭配器件:Raspberry Pi Pico w开发板

    network模块算是pico w的一个特色吧,在pico的基础上升级有了这次的pico w搭载的wifi模块可以实现联网,网络信息的获取等等,在此次任务重我掌握连接网络、查看网络参数等用法,实现通过网络同步系统时间,还能通过链接获取网站信息,实现一些很有趣的功能。

 

任务4:实现定位功能

掌握GNSS模块用法,实现定位功能。

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

    定位模块的使用有些曲折,测试了很多次都没有获取到坐标信息,在交流群里询问了各位大佬,了解了要到户外,在等一会才可以实现,最终,在尝试了一会后,终于实现了定位功能。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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