527|1

2

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子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。

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

source_ljy.zip (149.23 KB, 下载次数: 1)

 

最新回复

支持   详情 回复 发表于 2023-10-13 09:01
点赞 关注
 
 

回复
举报

3

帖子

0

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