496|1

11

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子 Follow me】 第2期任务提交--汇总帖(补充) [复制链接]

 

经过一段时间总算完成了任务

一、视频演示部分

二、项目总结报告:各阶段作业


1、开发环境配置     开发环境的安装  

在我拿到开发板的时候就开始上手,看乔老师的视频,开始学习circuitpython,开始第一次的esp32之旅,下面就是我的第一个总结,如何配置开发环境:

首先拿到开发板上电是这样的

第二个模式

这个模式会有一个u盘

 

第三个模式是circuitpython模式,需要在二模式下,把固件复制到u盘里面

 

第四个是vscode配置

需要配置这几个

 

代码编写在code.py编写,我这边改了下名字,到此就配置完全了

 

2、>>  控制WS2812B

 

首先要按键控制就需要知道按键的工作原理,按键原理就是按下时的电平变化,来判断。

我们先建立一个对象给按键,并且给他为上拉电阻,所以说为高电平,代码如下:

button =  digitalio.DigitalInOut(board.BUTTON)

button.switch_to_input(pull=digitalio.Pull.UP)

这个button变量就继承了按键,然后我就只需要判断他是否被按下,如果button的值为0就是被按下了。所以说按键部分就解决了

下一个就是霓虹灯了

首先我们先要对霓虹灯的电源进行配置,

power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)

这个代码是对霓虹灯电源对象赋值的

power.direction = digitalio.Direction.OUTPUT

这个是输出

power.value = True

使能

pixel = neopixel.NeoPixel(board.NEOPIXEL,1)

霓虹灯对象赋值,1是数量

pixel.brightness = 0.1 #亮度

灯珠的亮度

然后pixel里面有几个重要的函数

Pixel.fill((R,G,B))是设置灯珠的颜色

Pixel[0];这个是设置单棵灯珠的颜色

这里就介绍完了,下面就是这个的全部代码

import time

import board

import digitalio

import neopixel

Neoflag  = 1

#led灯的情况

led = digitalio.DigitalInOut(board.LED)

led.direction = digitalio.Direction.OUTPUT

 

#按键

button =  digitalio.DigitalInOut(board.BUTTON)

button.switch_to_input(pull=digitalio.Pull.UP)

 

#板载ws2812B灯珠

power = digitalio.DigitalInOut(board.NEOPIXEL_POWER)

power.direction = digitalio.Direction.OUTPUT

power.value = True

 

pixel = neopixel.NeoPixel(board.NEOPIXEL,1)

pixel.brightness = 0.1 #亮度

 

# 普通按键

status = False

while True:

   

    if not button.value:

        time.sleep(0.1)

        if button.value:

            print("按键已按下")

            Neoflag = Neoflag + 1

            if Neoflag == 1:

                pixel.fill((255,0,255))

            elif Neoflag == 2:

                pixel.fill((0,255,0))

            elif Neoflag == 3:

                pixel.fill((255,255,0))

                Neoflag = 0    

       

下面是硬件运行的结果

 

 

3、>>  网络功能使用
 

我们先来说连接WiFi连接部分,我们需要一个操作如下

先打开vscode

 

点进setting

 

具体操作如上面注释

代码具体如下:参考的乔老师的代码

这里是引库

#------联网功能--------#

import ssl,wifi,time

import socketpool

print("ESP32-s3 网络功能测试")

print("开发板MAC地址:",[hex(i) for i in wifi.radio.mac_address])

while not wifi.radio.connected:

    print("开发板正在联网....")

    time.sleep(1)

print("开发板已经连接到WIFI")

print("开发板IP地址",wifi.radio.ipv4_address)

这就是一个完整的程序

运行结果:

 

手机上也能看见

 

 

二、建立热点

 

前面是wifi的名字,后面是密码

 

4、>>  控制屏幕显示中文

很快哈,我这些任务就要完成了,这次是关于屏幕显示中文,因为这块板子自带了屏幕是st7789,我们可以直接用他的库进行调用,只需要一部就可以实现了,因为板子的固件默认已经绑定好显示设备,我们只需要引入对应的库,如下:

但是首先我们需要下载一个包操作如下

 

代码:

import board

#导入displayio库(显示屏库)

import displayio

from adafruit_display_text import label

#导入自定义文字标签

from adafruit_bitmap_font import bitmap_font

#导入自定义字体

# 给一个变量赋值,初始化屏幕

display = board.DISPLAY

#创立一个图像组

group =  displayio.Group(scale=1,x=0,y=0)

# 加载字体库  字体库我放在后面附件

font = bitmap_font.load_font("/font/wenquanyi_13px.pcf")

 

#颜色配置

color = 0x200609

color1 = 0x000000

color2 = 0x006051

#屏幕显示字体

 

#给标签赋值

data = label.Label(font, text="你好,世界!!", color=color)

#给位置

data.x = 150

data.y = 50

#将标签添加到图像组

group.append(data)

#显示当前图像组

display.show(group)

 

屏幕输出字体

 

5、 >>  分任务:日历&时钟

要想获取天气的话先要去高德申请一个api操作如下:

  1. 先注册登录高德(网站 高德开放平台 | 高德地图API (amap.com)
  2.  
  3.  
  4. 成功后就有个这个
 
  1. 添加key  

6、然后我们需要记录一下这个

 

 

待会要用到

下面就是代码部分

#----------天气获取-----------#

 

#Wifi 相关头文件

import os

import wifi

 

#网络请求相关文件

import adafruit_requests

import socketpool

import ssl

 

#定义api请求地址

Weather_URL = 'https://restapi.amap.com/v3/weather/weatherInfo?city=500106&key=这里是你的key'

poem_URL = "https://v1.jinrishici.com/all.json" #这个地方是我加的古诗

# 2. 创建套接字池

pool = socketpool.SocketPool(wifi.radio)

requests = adafruit_requests.Session(pool, ssl.create_default_context())

response = requests.get(Weather_URL)

weather = response.json()

    # 关闭连接

response.close()

pool = socketpool.SocketPool(wifi.radio)

requests = adafruit_requests.Session(pool, ssl.create_default_context())

response_poem = requests.get(poem_URL)

poem = response_poem.json()

print(poem)

#关闭连接

response_poem.close()

poem_item  = f"{poem['origin']}  "

poem_author = f" {poem['author']} "

poem_content = f" {poem['content']}"

 

#----------这里是获取返回的json的数据格式

weather = f"{weather['lives'][0]['weather']} {weather['lives'][0]['temperature']}℃ {weather['lives'][0]['humidity']}%"

 

#---------显示字体---------------#

# 加载字体并定义字体颜色为黑色

font = bitmap_font.load_font("/font/wenquanyi_13px.pcf")

 

color = 0xFFD700 # 黄色

color1 = 0x000000 # 黑色

color2 = 0xFF69B4 # 粉色

#年月日

text_year =str(time.tm_year)+"年"+str(time.tm_mon)+"月"+str(time.tm_mday)+"日"

data = label.Label(font, text=text_year, color=color2)

data.x = 30

data.y = 10

group.append(data)

display.show(group)

#星期

text_week = str(week(time.tm_wday))

data = label.Label(font, text=text_week, color=color2)

data.x = 50

data.y = 30

group.append(data)

display.show(group)

#时间

text_time = f"{time.tm_hour}:{min(time.tm_min)}:{sec(time.tm_sec)}"

data = label.Label(font, text=text_time, color=color2)

data.x = 43

data.y = 50

group.append(data)

display.show(group)

#天气温度

text_weather = weather

data = label.Label(font, text=text_weather, color=color2)

data.x = 30

data.y = 70

group.append(data)

display.show(group)

#古诗

text_poem = str(poem_item)

data = label.Label(font,text=text_poem,color = color2)

print(len(text_poem))

if len(text_poem) > 2 and len(text_poem) < 10:

    data.x = 43

if len(text_poem) > 10:

    data.x = 10

if len(text_poem) <= 2:

    data.x = 60

data.y = 85

group.append(data)

display.show(group)

 

text_poem = str(poem_author)

data = label.Label(font,text=text_poem,color = color2)

data.x = 50

data.y = 100

group.append(data)

display.show(group)

 

text_poem = str(poem_content)

data = label.Label(font,text=text_poem,color = color2)

data.x = 10

data.y = 115

group.append(data)

display.show(group)

 

二、是时间的获取

 

------------获取实时时间-------------#

#使用adafruit_ntp.NTP函数初始化ntp服务

import adafruit_ntp,socketpool,ssl

pool = socketpool.SocketPool(wifi.radio)

ntp = adafruit_ntp.NTP(pool, tz_offset=8, server="ntp.aliyun.com")

 

time = ntp.datetime

 

三、运行的结果

 

 
 
项目总结
    首先 作为一个大二的学生非常荣幸的参加了此次比赛,非常感谢得捷电子和电子工程世界,能给我们一个开发的机会,给我们一个友好的交流环境,交流群的大佬也非常的友好,里面的帖子也非常有质量,再一次感谢电子工程世界。
    作为第一次接触circuitpython来编译的小白,路上也有许多坎坎坷坷,但是还是完成了。主要是库已经搭好了,感谢各位无私奉献的开发者,谢谢你们。我从未接触的api获取,这次的项目让我真正的领悟到了如何操作,这还是得感谢群里得大佬们。
    总之这次得项目收益颇丰,从最开始的延迟发货,担心能不能完成,到现在的完成任务,提交任务。让我更加体会到了这次项目的收获。
 
代码附件
 
源码.zip (720.88 KB, 下载次数: 0)
 

 

最新回复

感谢大佬分享   详情 回复 发表于 2023-12-8 20:15
点赞 关注
 
 

回复
举报

243

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

感谢大佬分享

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

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