【得捷电子Follow me第2期】+3+1任务合集
[复制链接]
本帖最后由 eew_HC2nzN 于 2023-10-13 16:24 编辑
大家好,我为了方便一次性把四个任务放在一起了!有点乱,请见谅。这次活动使用的是Adafruit ESP32-S3 TFT Feather 开发板。使用的是CircuitPython Code Editor在线开发工具通过IE浏览器打开直接USB连接单片机实发分方便。CircuitPython语言(mircopython语言的分支)编写代码。本人自认为出色完成了开发工具的学习,板载RGB-LED灯、wifi模块的操作和lcd屏幕模块的驱动。
内容一:演示视频
这次实现的是汉字显示、wifi登录和广播、板载RGBled灯、天气时钟。
上述不同功能对应的都继承在同一个界面下了,所以也算是简单明了。
内容二:项目总结报告
必选任务:
1.汉字显示
2.wifi连接(client模式)和wifi广播(ap模式)
3.板载RGB灯控制
可选任务(1天气时钟)
设计一个多功能时钟,时钟实现的功能包括:获取当地的天气信息,时间的NTP校时和显示(支持汉字)。
1、代码分析
import board, displayio
import rtc, wifi, ssl
import time as Time
import socketpool
import neopixel
from digitalio import DigitalInOut, Direction, Pull
import adafruit_ntp
import adafruit_requests
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
1)此处是基础库导入,板子基本功能,时钟,wifi,网络服务,连接池,板载RGB灯管理,数字输入输出,字体显示等
#任务 链接wifi部分外置在settings.toml(不在本程序内,这个是外部文件的参数)
CIRCUITPY_WIFI_SSID = "自己的wifi的ssid"
CIRCUITPY_WIFI_PASSWORD = "自己的wifi密码"
##任务 创建热点
wifi.radio.start_ap('Follow_me_wifi', 'EEworld12345678')
print("Wifi raido begin")
2)这段代码就是任务2,wifi的连接和广播。这点,cpy做的很好,能直接使用三行代码达到目的
#加载必要字体
font = bitmap_font.load_font("/font/sytq_16.pcf")#此字体为群友龙哥制作
3)这个加载字体是任务一汉字显示的第一步,有了它几乎完成了最难得地方。字体文件选的是现成的
#加载文字标签函数
def labletext(x, y, text, font=font, color=0x0000FF,scale=1):
return label.Label(font, text=text, color=color, x=x, y=y,scale=scale)
#将文字添加到显示组
#设置文字标签
date = labletext(10, 20, "0月0日")
day = labletext(130, 20, "周八")
time = labletext(0, 100, "00:00:00",scale=2)
weather = labletext(120, 60, "?+/")
temp = labletext(180, 60, "00°")
#加入显示组
group.append(date)
group.append(day)
group.append(time)
group.append(weather)
group.append(temp)
4)加载字体函数,和字体标签设定和组合
# 联网获取时间与天气信息
pool = socketpool.SocketPool(wifi.radio) #初始化
ntp = adafruit_ntp.NTP(pool, tz_offset=8, server="ntp.aliyun.com") #校正时间
rtc.RTC().datetime = ntp.datetime #校正时间
requests = adafruit_requests.Session(pool, ssl.create_default_context()) #定义请求
def get_weather():#获取天气函数
city = "418978"#地区代码
key = "45641564af45s4fs5f465s4f5s4f6wq"#此处自行填写
url = "https://restapi.amap.com/v3/weather/weatherInfo?city=" + city + "&key=" + key
response = requests.get(url)#获取
json_resp = response.json()
response.close()
return json_resp["lives"][0]["temperature"], json_resp["lives"][0]["weather"]#提取参数
5)代码负责时间和天气信息的获取
##任务3(板载RGB) 基础设置
pixel_pin = board.NEOPIXEL
pixels = neopixel.NeoPixel(pixel_pin, 1, brightness=0.1, auto_write=False) #定义像素
def pixelsetcolor(c):#改变颜色函数,针对单个像素量身定制
pixels[0] = c
pixels.show()
#设置按钮
btn = DigitalInOut(board.BOOT0)
btn.direction = Direction.INPUT
btn.pull = Pull.UP
color = 0#控制rgb
6)任务三板载RGBled灯的变色控制,按键初始化,和预参数加载
##任务4 自动刷新标签
n = Time.localtime()
if (state == "init" or n.tm_min == 0):
date.text = "%d月%d日" % (n.tm_mon, n.tm_mday)
day.text = days[n.tm_wday]
t, w = get_weather()
weather.text = w+'/'
temp.text = "%s°" % (t)
state = "running"
#每次循环刷新
time.text = "%02d:%02d:%02d" % (n.tm_hour, n.tm_min, n.tm_sec)
display.show(group)
7)主函数中文字标签的刷新和加载
##任务(RGB) 循环颜色
if not btn.value:
if color % 8 == 0:
pixelsetcolor(0xFF0000)
print("Pixel is R")
elif color % 8 == 1:
pixelsetcolor(0x00FF00)
print("Pixel is G")
elif color % 8 == 2:
pixelsetcolor(0x0000FF)
print("Pixel is B")
elif color % 8 == 3:
pixelsetcolor(0xFFFF00)
print("Pixel is Yellow")
elif color % 8 == 4:
pixelsetcolor(0xFF00FF)
print("Pixel is Megenta")
elif color % 8 == 5:
pixelsetcolor(0x00FFFF)
print("Pixel is Cyan")
elif color % 8 == 6:
pixelsetcolor(0xFFFFFF)
print("Pixel is Light")
elif color % 8 == 7:
pixelsetcolor(0x000000)
print("Pixel is Dark")
color += 1
else:
pass
Time.sleep(0.2)#此处为适配按键led切换设置为0.2秒,如果只是时钟设置为1秒即可
8)主函数中的任务三负责修改板载led灯颜色的函数
2.界面展示
1)wifi连接界面
2)wifi广播界面
3)附加任务天气&时钟
4)RGB板载LED
4.参考资料
【得捷电子Follow me第2期】任务四:日历&时钟
【得捷电子Follow me第2期】任务汇总
5.总结
此次活动,难度适中,很适合本人,由于初次学习circuitpython,论坛和技术群里提供了充足的技术支持。感谢EEworld提供这次活动。这次活动挺有意义的,之前一直听说circuitpython,但是没有用过,通过这次活动深度体验了一次circuitpython编程。circuitpython编程也是很有趣的,编写速度快,能够第一时间的检查代码,在初期的原型验证阶段很方便。以后也尝试着在不同的场合使用circuitpython。最后再次感谢得捷电子和EEWORLD。
内容三:可编译下载的代码
|