Guamelon

  • 2024-04-09
  • 回复了主题帖: 矿卡|T9+入门使用

    T9+

  • 2023-11-21
  • 回复了主题帖: 【得捷电子Follow me第2期】全任务汇总

    Jacktang 发表于 2023-11-15 07:47 WS2812B效果控制,用板载boot按键切换颜色。也可以用无线按键切换颜色与亮度这个也可以试试的 可以的,无线控制部分是独立的。

  • 2023-11-14
  • 发表了主题帖: 【得捷电子Follow me第2期】全任务汇总

    很高兴能参加EEWORL电子工程世界与DigKey得捷电子合作的Follow me 第2期活动,让我有幸体验Adafruit ESP32-S3 TFT Feather开发板。Adafruit官方为这个开发板创作了许多的官方教程,非常利于初自学者学习。我在这些教程与大家的指导下完成了此次任务 //内容一:3-5分钟短视频// 【得捷电子Follow me第2期】任务演示视频-EEWORLD大学堂 //内容二: 任务/项目总结报告// 我在初期尝试使用VScode+ CircuitPython插件,但是cpy插件经常会莫名报错索性改用Thonny完成开发。 本次任务一共使用了三个开发板,其中两个用于无线遥控的发射与接收。远程控制主开发板。 任务1:控制屏幕显示中文  项目介绍:完成屏幕的控制,并且能显示中文  在这个任务中我遇到最困难的步骤就是制作字体的部分,最初我尝试直接将ttf字体转化为bdf文件,但它的体积太大了无法放入开发板内存之中。其次我尝试再通过bdftopcf font converter (adafruit.github.io)将其转化为pcf文件减小体积,但其大小依旧比开发板可用内存大无法放入。 在跟着做的直播中乔帮主@乔楚HonestQiao 介绍了利用FontForge精简字库的方法。经过一些波折我最终也完成了小体积字库的制作。 在字库完成后这个任务就很简单了,引入bitmap_font库调用函数就可以轻松完成汉字的显示。 import board import displayio from adafruit_display_text import label from adafruit_bitmap_font import bitmap_font # 初始化屏幕 display = board.DISPLAY #设置屏幕亮度 board.DISPLAY.brightness = 0.6 # 创建显示组 text_group = displayio.Group() #字体 内容 颜色 位置 行距 大小 text_area = label.Label(bitmap_font.load_font("font\jf-openhuninn-2.0-21.bdf"), text="天上有月 \n\n地下開fan",color=0xC94737,x=20,y=35,line_spacing=0.7,scale=2) #将文字放入显示组 text_group.append(text_area) #输出显示组内容 display.show(text_group) #死循环,一直显示的汉字 while True: pass 任务2:网络功能使用 项目介绍:完成网络功能的使用,能够创建热点和连接到WiFi  这个任务可以说是其中最简单的任务了 创建热点 直接引入WiFi库调用函数两行代码即可完成 import wifi #创建WiFi热点 wifi.radio.start_ap("WiFi_Mista", "44444444") 连接到WiFi 直接修改配置文件settings.toml 即可完成 打开settings.toml文件添加 CIRCUITPY_WIFI_SSID = "这里填WiFi名" CIRCUITPY_WIFI_PASSWORD = "这里填WiFi密码" 两行代码并写入自己的WiFi名与密码保存后重启即可自动连接至WiFi并显示ip地址。 CIRCUITPY_WIFI_SSID = "这里填WiFi名" CIRCUITPY_WIFI_PASSWORD = "这里填WiFi密码"   任务3:控制WS2812B 项目介绍:使用按键控制板载Neopixel LED的显示和颜色切换 使用这个开发板搭配cpy驱动WS2812B也是十分轻松的,官方的示例中提供了NeoPixel LED的示例demo。只需结合教程中之前的数字输入即可完成这个任务 import time import board import digitalio import neopixel #配置Neopixel灯 pixel = neopixel.NeoPixel(board.NEOPIXEL, 1) #设置Neopixel亮度 pixel.brightness = 0.1 # 配置按键 key = digitalio.DigitalInOut(board.BUTTON) key.switch_to_input(pull=digitalio.Pull.UP) while True: #当按下按钮时对颜色进行设置 if not key.value: #消抖 time.sleep(0.2) pixel.fill((255, 0, 0)) time.sleep(0.5) if not key.value: pixel.fill((0, 255, 0)) time.sleep(0.5) if not key.value: pixel.fill((0, 0, 255)) time.sleep(0.5)   任务4:WS2812B效果控制 项目介绍:完成一个Neopixel(12灯珠或以上)控制器,通过按键和屏幕切换展示效果 我为这个任务制作了两个4*4的小型WS2812B的灯板,将它们插在了面包板上使用。直接使用usb引脚的5v vbus进行供电 软件部分有了任务一的屏幕操作与任务三的控制WS2812B的基础,又新学习引入了display_shapes库进行图形的绘制,文字没有使用任务一自制的字库而是使用了内置字库。同时更改了led灯颜色的控制模式了。 控制部分,可以用板载boot按键切换颜色。也可以用无线按键切换颜色与亮度。 import time import board import neopixel import displayio import digitalio,terminalio from adafruit_display_text import label from adafruit_display_shapes.circle import Circle # 初始化屏幕 display = board.DISPLAY #设置屏幕亮度 board.DISPLAY.brightness = 0.6 # 创建显示组 shape_group = displayio.Group() # 配置按键 key = digitalio.DigitalInOut(board.BUTTON) key.switch_to_input(pull=digitalio.Pull.UP) key1 = digitalio.DigitalInOut(board.D5) key1.switch_to_input(pull=digitalio.Pull.UP) key2 = digitalio.DigitalInOut(board.A0) key2.switch_to_input(pull=digitalio.Pull.UP) #配置Neopixel灯 pixel = neopixel.NeoPixel(board.D6, 32) #创建两个变量 a = 0 b = 1 #输出到屏幕的信息 text = label.Label(terminalio.FONT, text="Press Red \nChange color",color=0xff0000,x=0,y=20,scale=2) text1 = label.Label(terminalio.FONT, text="Press Green \nChange btightness",color=0x00ff00,x=0,y=90,scale=2) text2 = label.Label(terminalio.FONT, text="The Color",color=0xffffff,x=130,y=10,scale=2) shape_group.append(text) shape_group.append(text1) shape_group.append(text2) display.show(shape_group) while True: #颜色控制 if key.value == 0 or key1.value == 0: #消抖 time.sleep(0.2) a = a + 1 if (a >= 3): a = 0 #亮度控制 if key2.value == 0: time.sleep(0.2) b = b + 1 if (b >= 11): b = 1 if a == 0: #更新需要改变的信息 circle = Circle(x0=200, y0=60, r=30, fill=0xff0000, outline=0xffffff) shape_group.append(circle) display.show(shape_group) #设置Neopixel颜色 pixel.fill((255,0,0)) #设置Neopixel亮度 pixel.brightness = b/10 if a == 1: circle = Circle(x0=200, y0=60, r=30, fill=0x00ff00, outline=0xFFffFF) shape_group.append(circle) display.show(shape_group) pixel.fill((0,255,0)) pixel.brightness = b/10 if a == 2: circle = Circle(x0=200, y0=60, r=30, fill=0x0000ff, outline=0xFFffFF) shape_group.append(circle) display.show(shape_group) pixel.fill((0,0,255)) pixel.brightness = b/10 无线遥控部分 接收部分代码 开发板: M5STAMP PICO MATE 使用Arduino #include <esp_now.h> #include <WiFi.h> #include <Arduino.h> int RED = 18; int GREN = 19; int q = 0; int w = 0; // 创建一个结构体接收数据 typedef struct struct_message { int a; int b; } struct_message; // 创建一个结构体变量 struct_message myData; // 回调函数,当收到消息时会调佣该函数 void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Bytes received: "); Serial.println(len); Serial.print("RED: "); Serial.println(myData.a); Serial.print("GREN: "); Serial.println(myData.b); Serial.println(); } void setup() { // 初始化串口波特率 Serial.begin(115200); // 设置wifi模式 WiFi.mode(WIFI_STA); // 初始化esp-now if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } //注册接收信息的回调函数 esp_now_register_recv_cb(OnDataRecv); pinMode(RED, OUTPUT); pinMode(GREN, OUTPUT); } void loop() { q = myData.a; w = myData.b; if(q == 1) digitalWrite(RED, LOW); else digitalWrite(RED,HIGH ); if(w == 1) digitalWrite(GREN, LOW); else digitalWrite(GREN, HIGH); delay(250); } 发送部分代码 开发板: SEEED STUDIO XIAO ESP32C3 使用Arduino #include <esp_now.h> #include <WiFi.h> #include <Arduino.h> int RED = D3; int GREN = D4; // 接收端的MAC地址 uint8_t broadcastAddress[] = {0xE8, 0x9F, 0x6D, 0x08, 0xC6, 0x58};//M5Stamp //uint8_t broadcastAddress[] = {0x34, 0x85, 0x18, 0x05, 0xCD, 0x44};//XIAO C3 // 发送结构体类型 typedef struct struct_message { int a; int b; } struct_message; // 创建一个结构体变量 struct_message myData; // 回调函数,函数将在发送消息时执行。此函数告诉我们信息是否成功发送; void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nLast Packet Send Status:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail"); } void setup() { // 初始化串口波特率 Serial.begin(115200); // 设置WIFI模式为STA模式,即无线终端 WiFi.mode(WIFI_STA); // 初始化ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } //注册回调函数 esp_now_register_send_cb(OnDataSent); // 注册通信频道 esp_now_peer_info_t peerInfo; memcpy(peerInfo.peer_addr, broadcastAddress, 6); peerInfo.channel = 0; //通道 peerInfo.encrypt = false;//是否加密为False if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); return; } pinMode(RED,INPUT_PULLUP); pinMode(GREN,INPUT_PULLUP); } void loop() { //设置要发送的值 if(digitalRead(RED) == 0) { myData.a = 1; } else myData.a = 0; if(digitalRead(GREN) == 0) { myData.b = 1; } else myData.b = 0; //发送信息到指定ESP32上 esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); //判断是否发送成功 if (result == ESP_OK) { Serial.println("Sent with success"); } else { Serial.println("Error sending the data"); } delay(250); } 对本活动的心得体会(包括意见或建议) 这次活动是我第一次接触200+的开发板,也是我第一次使用python(CPY)编程 。不得不说adafruit丰富的资料使得学习难度降低了很多。对于穷学生来说这种体验真的很难得,希望下次还能有机会参与。 意见和建议嘛,希望之后的活动能准备充足的库存吧ψ(`∇´)ψ   //内容三:可编译下载的代码// 全部代码:Follow me第2期全部任务代码-嵌入式开发相关资料下载-EEWORLD下载中心 更改后的任务四:更改后的Follow me第2期第四任务-嵌入式开发相关资料下载-EEWORLD下载中心

  • 加入了学习《Follow me第二期任务展示视频》,观看 Follow me第二期任务展示视频

  • 2023-11-13
  • 加入了学习《基于Adafruit ESP32-S3 TFT Feather的网络应用开发实践》,观看 基于Adafruit ESP32-S3 TFT Feather的网络应用开发实践

  • 上传了资料: 更改后的Follow me第2期第四任务

  • 2023-11-11
  • 上传了资料: Follow me第2期全部任务代码

  • 上传了资料: Follow me第2期四个任务代码

  • 2023-11-02
  • 加入了学习《【得捷电子Follow me第2期】任务提交 》,观看 【得捷电子Follow me第2期】任务提交

最近访客

现在还没有访客

< 1/0 >

统计信息

已有--人来访过

  • 芯积分:70
  • 好友:--
  • 主题:1
  • 回复:3

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言