[作品提交] 【得捷电子Follow me第2期】+买三送一“小霸王”任务合集

eew_5QNxi6   2023-10-14 10:56 楼主

各位晚上好,我是新人up。第一次玩circuitpython,本来不想来的,但是铁子偶然间查到咱们EEWORLD和digikey举办的follow me2活动,愣是要上,没办法打仗亲兄弟,所以来了。技术不好,见谅,但是绝对认真完成任务。

本次活动使用adafruit组织的circuitpython语言。circuitpython语言属于micropython分支,adafruit的主板对于cpy都准专门优化的优化。所以此次必然选择circuitpython语言来完成编程。以下是技术正文

一、项目介绍

1.项目目的介绍:

本次任务需要完成三个必选目标和一个可选目标即:

1)屏幕输出汉字

2)wifi功能,wifi连接和广播

3)板载多彩led灯配合按键展示

4)*选择任务

  完成一个可通过互联网更新的万年历时钟,并显示当地的天气信息

所需硬件:Adafruit ESP32-S3 TFT Feather

2.项目结构介绍:

本次任务比较简单,所以采用“小霸王合集”形式,即一次性代码实现所有功能。以下是程序部分

 

import board, displayiortc, wifi, ssl,rtc, wifi
import time as Time
import socketpool
import neopixel
from digitalio import DigitalInOut, Direction, Pull
import adafruit_imageload
import adafruit_ntp
import adafruit_requests
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font

1)首先引入必须的包,其中主板驱动,时钟,wifi,ssl连接池,多彩led驱动,屏幕文字,图片驱动等

#以下代码在根目录settings.toml文件夹中
#连接已知wifi
CIRCUITPY_WIFI_SSID = "自己的wifi热点名称"
CIRCUITPY_WIFI_PASSWORD = "自己的wifi热点密码"

#以下代码在code.py中
##任务 创建热点
wifi.radio.start_ap('Follow_me_wifi', 'EEworld12345678')
print("Wifi raido begin")

2)关于任务2  wifi任务的代码部分的讲解,只需要四行代码,即可完成wifi的连接和ap广播

##任务3(板载RGB) 基础设置
pixel_pin = board.NEOPIXEL
pixels = neopixel.NeoPixel(pixel_pin, 1, brightness=0.2, 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



#以下代码在while主循环里面
##任务(RGB) 循环颜色
    if not btn.value:
        if color % 3 == 0:
            pixelsetcolor(0xFF0000)
            print("Pixel is R")
        elif color % 3 == 1:
            pixelsetcolor(0x00FF00)
            print("Pixel is G")
        elif color % 3 == 2:
            pixelsetcolor(0x0000FF)
            print("Pixel is B")
        color += 1
    else:
        pass
    Time.sleep(0.5)#灯光保持0.5秒

3) 关于任务3   板载多彩LED的代码,其中l多彩led显示3种不同颜色,用按键来激活灯光的颜色(除3的余数对应RGB)

##任务4-天气&时钟代码

display = board.DISPLAY #初始化屏幕
display.rotation = 90  #屏幕旋转90度
group = displayio.Group() #定义显示组别
# 加载图片
image, palette = adafruit_imageload.load("/img/snake.bmp")
# 是否开启透明
palette.make_transparent(1)

# 创建图片布局
grid = displayio.TileGrid(image, pixel_shader=palette,width=1, height=1)

# 将图片布局添加到图像组,由于是第一个添加的,默认是最下层
group.append(grid)

#加载必要字体
font = bitmap_font.load_font("/font/sytq_16.pcf")#此字体为群友龙哥制作

#加载文字标签函数
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(0, 100, "0月0日",color=0x0000FF)
day = labletext(95, 100, "周八",color=0x0000FF)
time = labletext(0, 125, "00:00:00",color=0x00FFFF)
weather = labletext(0, 160, "?+/",color=0xFFFFFF,scale=2)
temp = labletext(60, 200, "00°",color=0xFFFFFF,scale=2)
#加入显示组
group.append(date)
group.append(day)
group.append(time)
group.append(weather)
group.append(temp)


# 联网获取时间与天气信息
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 = "325600"#地区代码
    key = "1joijinji23ji23257k7kj56h7k5"#此处自行填写
    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"]#提取参数


#以下代码在while主循环里面
   ##任务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)

4)关于任务1&任务4的综合代码,因为天气时钟自然包括汉字显示。首先确定显示的图片设置(大小位置等),确定文本显示信息,但是文本屏幕的输出函数display.show(group)在while主循环里面。

二、成果展示

微信截图_20231014105948.png

图示

【得捷电子Follow me第2期】小霸王合集-EEWORLD大学堂

视频

三、总结

经过本次得捷电子Follow me第2期 的学习,使我学习了更快速高质量的单片机开发方式。真的收获满满!下次还要多介绍几个同学来学习

四、代码附件

F&M2_code_whl.zip (140.37 KB)
(下载次数: 1, 2023-10-13 21:56 上传)
本帖最后由 eew_5QNxi6 于 2023-10-14 22:09 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复