664|0

1

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】任务汇总 [复制链接]

  本帖最后由 YiNan 于 2023-11-9 18:13 编辑

前言:非常高兴能参加得捷电子followme第二期。本人为电子信息类专业的大二学生,在同学的介绍下参与了本次活动,此次活动中我学习了circuitPython的使用方法,虽然过程对我这个小白来说有些困难,但还是完成了任务。下面我会展示各个任务的完成情况。

内容一:视频

https://training.eeworld.com.cn/video/38247

 

内容二:任务/项目总结报告

    任务一:控制屏幕显示中文

        项目介绍:本项目主要使用外部库adafruit_display_text和adafruit_bitmap_font。加载pcf或bdf格式的中文字体库来显示中文。可以在这个网站下载相关库https://circuitpython.org/board/adafruit_feather_esp32s3_tft/ 

           主要代码片段及说明:

导入库

#导入内置库
import board
import digitalio
import time
import displayio
#导入外部库
from adafruit_display_text import bitmap_label
from adafruit_bitmap_font import bitmap_font

  这是从官方网站上下载的需要的库,放在lib文件夹下

 

 定义变量

display = board.DISPLAY  #定义屏幕
group = displayio.Group()  #定义组

 加载字体,最后死循环保证屏幕持续显示

font = bitmap_font.load_font("fonts\wenquanyi_13px.pcf") #加载字体

color = 0x11ff11 #字体设置为绿色
text1 = "为世界上"
scale = 2
l1 = bitmap_label.Label(font,text=text1,color=color,scale=scale,x=60,y=40)
group.append(l1)

text2 = "所有的美好而战!"
l2 = bitmap_label.Label(font,text=text2,color=color,scale=scale,x=20,y=70)
group.append(l2)

display.show(group) #显示组

while True:  #死循环
 pass

功能展示及说明:

 

任务二:网络功能使用

项目介绍:两种方法连接WiFi并显示IP地址,创建热点并显示WiFi名称和密码

主要代码片段及说明:第一种连接WiFi方法:

导入内部库

import os
import wifi

 通过这条代码来连接WiFi,第一个引号内为WiFi名称,第二个引号内为WiFi密码

wifi.radio.connect('222', 'kxx666666') #连接WiFi

 设置字体并显示

font = bitmap_font.load_font("fonts\wenquanyi_13px.pcf") #加载字体
color = 0x00FF00 #白色

text1 = "IP: " + str(wifi.radio.ipv4_address) #WiFi的IPv4地址
scale = 2 #字体大小

l1 = bitmap_label.Label(font, text=text1, scale=scale)
l1.x = 0
l1.y = 30
board.DISPLAY.show(l1) #显示文本

while True: #死循环
    pass

第二种连接WiFi方法:

打开CIRCUITPY磁盘找到settings.toml文件,用记事本打开

 
 

每次重启自动连接WiFi

创建热点:

导入库

import os
import wifi

 通过这条代码开启热点,第一个引号内为热点名称,第二个引号内为热点密码

wifi.radio.start_ap('YiNan的WiFi','yinan2004') #启动热点

 配置屏幕和字体

display = board.DISPLAY #配置屏幕
board.DISPLAY.brightness = 1  
board.DISPLAY.rotation = 0

font = bitmap_font.load_font("fonts\wenquanyi_13px.pcf") #加载字体

color = 0xFFFFFF  #字体为白色

text1 = "WIFI名字: YiNan的WiFi\n密码:yinan2004"
scale = 1

l1 = bitmap_label.Label(font, text=text1, scale=scale)
l1.x = 0
l1.y = 30
board.DISPLAY.show(l1) #显示WiFi名称和密码

while True:
    pass

功能展示及说明:

第一种连接WiFi方法演示

 第二种连接WiFi方法演示

 

  创建热点演示

 

 

    任务三:控制WS28128

项目介绍:此项目需要导入neopixel和adafruit_pixelbuf库,可以从ESP32-S3官方网站下载

主要代码片段及说明:

首先导入必要的库

#导入库
import time
import board
from adafruit_display_text import neopixel
import digitalio

 定义LED和按键,这块板子自带两个按键,一个是reset按键,用不了,另一个是boot 按键,通过配置boot按键来实现对LED的控制。

led = digitalio.DigitalInOut(board.LED) #定义LED
led.direction = digitalio.Direction.OUTPUT
button =  digitalio.DigitalInOut(board.BUTTON) #初始化按键
button.direction = digitalio.Direction.INPUT 
button.pull = digitalio.Pull.UP 

 循环结构,每按下一次按键就可以切换颜色。

power = digitalio.DigitalInOut(board.NEOPIXEL_POWER) #LED电源控制
power.direction = digitalio.Direction.OUTPUT
power.value = True

pixel = neopixel.NeoPixel(board.NEOPIXEL,1)
pixel.brightness = 0.2 #亮度

status = False
i = 0

while True:
    if not button.value:
        time.sleep(0.1)
        if button.value:
            i = i + 1
            if i == 1:
                pixel.fill((255,0,0))
            elif i == 2:
                pixel.fill((255,255,0))
            elif i == 3:
                pixel.fill((0,255,0))
            elif i == 4:
                pixel.fill((0,255,255))
            elif i == 5:
                pixel.fill((0,0,255))
            elif i == 6:
                pixel.fill((255,0,255))
                i = 0  

功能展示及说明:

QQ视频20231108214230

    任务四:

        分任务1:日历&时钟

项目介绍:通过大佬分享的免费api接口可以轻松获取当地城市的天气状况和时间

免费api接口:https://www.sojson.com/api/weather.html

本项目还需导入外部库adafruit_requests来获取Json

主要代码片段及说明:

#导入库
import board
import os
import wifi
import ssl
import socketpool
import displayio
import time
import adafruit_imageload

from adafruit_display_text import adafruit_requests
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font

 我使用了adafruit_imageload库来自定义了一个背景图片

display = board.DISPLAY #初始化屏幕
board.DISPLAY.brightness = 0.8
board.DISPLAY.rotation = 0

group = displayio.Group() #创建组

image, palette = adafruit_imageload.load("/pic/yinan.bmp",bitmap=displayio.Bitmap,palette=displayio.Palette) #加载图片
palette.make_transparent(0) #设置图片透明度
tile_grid = displayio.TileGrid(image,pixel_shader=palette)
group.append(tile_grid)

display.show(group)

 向这个api接口请求获取数据并显示在屏幕上

wifi.radio.connect('222', 'kxx666666')  #连接上Wi-Fi
 
JSON_TIME_URL = "http://t.weather.sojson.com/api/weather/city/101050101"  #请求获取JSON  

pool = socketpool.SocketPool(wifi.radio) #初始化requests对象
requests = adafruit_requests.Session(pool, ssl.create_default_context())

response = requests.get(JSON_TIME_URL) #获取Json 
weather = response.json()
cityInfo  = weather['cityInfo']
city_weather = weather['data']
forecast = city_weather['forecast']

dis_str = ""+cityInfo['parent']+' '+cityInfo['city'] #获取数据
dis_str += '\n' + weather['time'] 
dis_str += '\n 空气质量:'+city_weather['quality'] +" " +forecast[0]['type'] 
dis_str += "\n 最"+forecast[0]['high']+' 最'+forecast[0]['low']
dis_str += "\n 湿度: "+city_weather['shidu']+'\n pm2.5:'+str(city_weather['pm25']) +'\n pm10:'+str(city_weather['pm10'])
dis_str += '\n 提示:'+forecast[0]['notice'] 
 
font = bitmap_font.load_font("/fonts/wenquanyi_13px.pcf") #加载字体
color = 0x000000
l1 = label.Label(font, text=dis_str, color=color)
l1.x = 0
l1.y = 10
l1.line_spacing = 0.8
l1.scale = 1
group.append(l1)

display.show(group) #显示组

while True:
    pass

功能展示及说明:

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

https://download.eeworld.com.cn/detail/eew_YNlNg3/629832

总结:非常荣幸能够参加得捷和EEword联合举办的Follow me 第二期的活动, 之前我一直使用arduino来编写程序,这次活动尝试使用circuitpython来开发,我发现官方的库文件十分齐全,使整个代码的编写变得十分简单。由于板子的存储非常小,所以我在显示中文任务中想使用自己制作的字库文件,但由于我对字库制作并不熟悉,所以导致我在制作字库的过程中浪费了大量时间,最后不得已使用了其他大佬制作的字库。

总之,经过这次活动,我学习了不少有关嵌入式的知识,像是打开了新世界的大门

点赞 关注
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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