624|1

3

帖子

4

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】任务1~4 [复制链接]

  本帖最后由 隔壁小黑 于 2023-11-21 17:18 编辑

非常高兴能够参加得捷电子Follow me第2期的活动,我是通过B站UP忙碌的死龙了解到这次活动的,在活动结束前一天提交了活动申请,收货时间比较晚。由于一些个人原因,忘记提交作业了,官方还专门发短信提醒,现在把自己的成果展示一下,由于python是工作以后自学的,代码规范性很差,还请见谅。

内容一:演示视频

性格比较内向,还请大家见谅

Followme 第二期 自我介绍及成果展示- Followme 第二期 自我介绍及成果展示-EEWORLD大学堂

内容二:项目总结报告

一、 开发板介绍

      使用的是ESP32 S-3 feather_TFT,拥有4MB falsh以及2M的内存,TYPE-C接口(之前买的ESP32开发板都是老的安卓口,还需要专门准备一条线),开发板带TFT屏幕和电源管理,使用起来方便了很多。

二、准备工作

Feather ESP32-S3 TFT Download (circuitpython.org)下载了8.2.8的固件,使用乐鑫官方工具|乐鑫科技 (espressif.com.cn)下载了Flash工具烧录了固件。刷入bin固件后电脑出现的优盘图标,将uf2文件放入后重启却不能正常运行。最后发现是没有格式化,格式化后再次刷入bin并放置uf2文件后,板子能够正常运行CircuitPython了。因为英文不好,固件下载时语言选择了CHINESE(PINYIN),提示均是拼音,第一次有一种自己拼音也不好的感觉。

 

Libraries (circuitpython.org)下载了对应版本的扩展库,方便自己往程序里面添加。

编译器是按照官方的推荐使用的MU编辑器下载 Mu (codewith.mu),刚开始因为没有看编辑器的官方文档,还比较怀念MicroPython能够一句一句调试的模式(自学的代码,掌握的不好,一句一句调试心里更有底),后面查询了官方文档,了解了在MU边界其界面点击串口,然后按两次ctrl+c进入REPL模式,就能查看库的帮助文档和一句一句调试代码了。

三、本项目将包括以下内容:

任务一、完成屏幕的控制,并且能显示中文

任务二、完成网络功能的使用,能够创建热点和连接到WiFi

任务三、使用按键控制板载Neopixel LED的显示和颜色切换

任务四、WS2812B效果控制——完成一个Neopixel(12灯珠或以上)控制器,通过按键和屏幕切换展示效果

 

任务一、完成屏幕的控制,并且能显示中文

字库直接使用群友发的字体包了,显示的是入门标准的hello world,通过这个任务主要完成了CircuitPython加库和查看帮助的方法,总体感觉和MicroPython比较相似。界面显示也是以图层为单位切换的。

import board

import displayio

from adafruit_display_text import label, wrap_text_to_lines

from adafruit_bitmap_font import bitmap_font



my_str="你好,世界"



display = board.DISPLAY

board.DISPLAY.brightness = 0.2#屏幕亮度

board.DISPLAY.rotation = 0#屏幕旋转



font = bitmap_font.load_font("lib/wenquanyi.pcf")#加载字体包



text_group = displayio.Group()



text_1 = label.Label(font, text=my_str, color=0xFF0000)

text_1.x = 0#起点偏移X

text_1.y = 5#起点偏移X

text_1.line_spacing = 1#行间距

text_1.scale = 1#字体大小

text_group.append(text_1)#添加字体



text_2 = label.Label(font, text=my_str, color=0x00FF00)

text_2.x = 0#起点偏移X

text_2.y = 25#起点偏移X

text_2.line_spacing = 1#行间距

text_2.scale = 2#字体大小

text_group.append(text_2)



text_3 = label.Label(font, text=my_str, color=0x0000FF)

text_3.x = 0#起点偏移X

text_3.y = 55#起点偏移X

text_3.line_spacing = 1#行间距

text_3.scale = 3#字体大小

text_group.append(text_3)



text_4 = label.Label(font, text=my_str, color=0xFFFFFF)

text_4.x = 0#起点偏移X

text_4.y = 100#起点偏移X

text_4.line_spacing = 1#行间距

text_4.scale = 4#字体大小

text_group.append(text_4)



display.show(text_group)

while True:

    pass

 

任务二、完成网络功能的使用,能够创建热点和连接到WiFi

CircuitPython链接WiFi和创建热点特别方便,但是如果链接超时时会直接抛出异常,使用try、except的组合可以在没有对应热点的时候保证程序能够跑完。

import board

import wifi

#设置wifi和密码

SSID = "zhang"

PASSWORD = "z123456789"

#连接wifi

buf_number=0

#等待连接成功

print("Start linking wifi")

while buf_number<5:

    print("the "+str(buf_number+1)+" time connection" )

    try:

        wifi.radio.connect(SSID, PASSWORD)

    except:

        pass

    if wifi.radio.connected:#判断是否链接成功

        print("Linking success")

        print("IP:", wifi.radio.ipv4_address)

        break

    buf_number=buf_number+1

    if buf_number==5:

        print("Linking fail")

# 启动热点

AP_SSID = "AP_zhang"

print("Start AP")

wifi.radio.start_ap(AP_SSID, PASSWORD)

print("AP IP:",wifi.radio.ipv4_address_ap)

while True:

    pass

     

任务三、使用按键控制板载Neopixel LED的显示和颜色切换

原理图中Boot按键是低电平有效,拉高电平,使用软件消抖0.1s,但是看大佬们的代码都不消抖。

import board

import neopixel

import keypad

import time

from digitalio import DigitalInOut, Direction, Pull

def Dispelling_trembling(IO_name, state):  # 消抖

    while 1:

        if IO_name.value == state:

            time.sleep(0.1)

            if IO_name.value == state:

                break

pixe = neopixel.NeoPixel(board.NEOPIXEL, 1)  # 控制出口,灯的数量

pixe.brightness = 0.2  # 亮度

btn = DigitalInOut(board.BOOT0)  # 使用Boot按键

btn.direction = Direction.INPUT

btn.pull = Pull.UP  # 拉高电平

colors_buf = [(255, 0, 0), (255, 255, 0), (255, 0, 255), (0, 255, 255), (255, 255, 255)]

pixe[0] = (0, 0, 0)

a = 0

while 1:

    print("Press the Boot key to switch colors")

    Dispelling_trembling(btn, 0)

    pixe[0] = colors_buf[a]

    a = a + 1

    if a == 5:

        a = 0

    Dispelling_trembling(btn, 1)

 

任务四、WS2812B效果控制——完成一个Neopixel(12灯珠或以上)控制器,通过按键和屏幕切换展示效果

使用的是24位WS2812B控制板,外接供电。因为需要连接的线比较少,控制板和ESP32 S-3 feather_TFT之间直接使用杜邦线连接。

按键效果是不按Boot键流水灯正转,屏幕显示正转;按下Boot键流水灯反转,屏幕显示反转。本来想做一个漂亮的流水灯,最后只能说是一个流水灯,和想象的差距还是挺大的。

import board

import neopixel

import keypad

import time

from digitalio import DigitalInOut, Direction, Pull

#显示汉字

import displayio

from adafruit_display_text import label, wrap_text_to_lines

from adafruit_bitmap_font import bitmap_font

stop_str="正转"

start_str="反转"

display = board.DISPLAY# 使用固件自带的屏幕设备

board.DISPLAY.brightness = 0.2#屏幕亮度

font = bitmap_font.load_font("lib/wenquanyi.pcf")#加载字体包

stop_group = displayio.Group()# 创建图层

start_group = displayio.Group()# 创建图层



stop_text= label.Label(font, text=stop_str, color=0xFF0000)

stop_text.x = 50#起点偏移X

stop_text.y = 60#起点偏移X

stop_text.line_spacing = 1#行间距

stop_text.scale = 4#字体大小

stop_group.append(stop_text)#添加字体



start_text= label.Label(font, text=start_str, color=0x00FF00)

start_text.x = 50#起点偏移X

start_text.y = 60#起点偏移X

start_text.line_spacing = 1#行间距

start_text.scale = 4#字体大小

start_group.append(start_text)#添加字体





def Dispelling_trembling(IO_name, state):  # 消抖

    if IO_name.value == state:

        time.sleep(0.1)

        if IO_name.value == state:

            return True

    return False

pixe = neopixel.NeoPixel(board.A0,24)#控制出口,灯的数量

pixe.brightness=0.2# 亮度

#设置按键

btn = DigitalInOut(board.BOOT0) # 使用Boot按键

btn.direction = Direction.INPUT

btn.pull = Pull.UP# 拉高电平

stop_buf=True

btn_buf=True

while 1:

    buf=btn.value

    buf_led=[(0,0,0)]*24#颜色缓存数组

    pixe.fill((0,0,0))#清空

    if buf:

        display.show(stop_group)#正转

    else:

        display.show(start_group)#反转

    while btn.value==buf:

        a=0

        while a<24:

            #颜色数组变化

            buf_led.pop()

            if a<8:

                buf_1=(a*32,0,0)

            elif a<16:

                buf_1=(255,(a-8)*32,0)

            else:

                buf_1=(255,255,(a-16)*32)

            buf_led.insert(0,buf_1)

            #给24个灯设置颜色

            for i in range(0,24):

                if buf:

                    pixe[i]=buf_led[i]

                else:

                    pixe[i]=buf_led[23-i]

            a=a+1

            if btn.value!=buf:

                break

            time.sleep(0.1)

四、活动体验

非常感谢EEWORLD给予的课程资源和活动资源,让我有了一个学习CircuitPython的机会。ESP32 S-3 feather_TFT板子功能也很全面,平时做个小玩具资源完全够用。

CircuitPython和MicroPython相比,中文资料还是太少了,对于英文不好的我来说查阅相关资料的难度还是大一点。自己的查找资料的能力和写代码的能力还是比较弱。

内容三:可编译下载的代码:

源码、库以及字体文件:EEWORLD下载中心

最新回复

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来   详情 回复 发表于 2023-11-23 18:53
点赞 关注
 
 

回复
举报

731

帖子

4

TA的资源

纯净的硅(高级)

沙发
 

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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