Lucheni

  • 2023-11-15
  • 回复了主题帖: 【得捷电子Follow me第2期】空气质量传感器和网络控制led显示展示

    lansebuluo 发表于 2023-11-15 08:44 能不能交替显示 网络控制的字体可以变大,空气质量显示的字体其实已经挺极限了,屏幕就这么高,要显示5 ...
    可以的,按你说的最简单其实是所有数据滚动显示,就跟边上的led一样

  • 2023-11-14
  • 回复了主题帖: 【得捷电子Follow me第2期】空气质量传感器和网络控制led显示展示

    lansebuluo 发表于 2023-11-14 18:19 空气质量传感器和网络控制led显示,字体好小啊,能不能放大一些
    网络控制的字体可以变大,空气质量显示的字体其实已经挺极限了,屏幕就这么高,要显示5行

  • 回复了主题帖: 【得捷电子Follow me第2期】空气质量传感器和网络控制led显示展示

    秦天qintian0303 发表于 2023-11-14 16:55 这个全彩点阵屏挺不错啊,特意做的吗?  
    Adafruit官方的,板子叫dotstar wing,用的是apa102灯珠,理论通信速度高于ws2812

  • 加入了学习《【得捷电子Follow me第2期】空气质量传感器与基于wifi的led控制系统》,观看 基于Adafruit esp32s3 tft feather的空气质量传感器与基于wifi的led控制系统

  • 发表了主题帖: 【得捷电子Follow me第2期】空气质量传感器和网络控制led显示展示

    本帖最后由 Lucheni 于 2023-11-14 16:43 编辑 本帖子为Follow me第二期最终的作业提交展示,共完成了两个项目 ①空气质量传感器 ②基于板载按键和网页按键的rgb led控制系统 具体项目展示可参考视频:http://training.eeworld.com.cn/video/38390?md5__2280=eqRxy7GQeiu49DBqDTClYOi%3Dq0Qweq%2Bex&alichlgref=http%3A%2F%2Ftraining.eeworld.com.cn%2Fcourse%2F68227 空气质量传感器项目介绍及关键代码说明: 此项目使用Adafruit ESP32-S3 TFT Feather板卡连接了SGP40和SCD41传感器,这两颗传感器可以分别测量voc、温度、湿度以及真实二氧化碳数值,开发板板载有iic接口,同时还有一块TFT彩屏,非常适合用来进行传感器的链接以及数据显示,所以本项目基于这三个部分搭建了空气质量传感器的demo 代码采用arduino编写,各个模块初始化、数据读取以及显示刷新都被我封装为函数,在setup及loop函数中直接进行调用,个人认为可阅读性还是非常高的 以下是传感器数据读取函数,其中要注意的是sgp40内部计算voc时需要将scd41获取的温湿度数据传入 void ScdRead(uint16_t &co2, float &temperature, float &humidity){ bool isDataReady = false; uint16_t error; error = scd4x.getDataReadyFlag(isDataReady); if (isDataReady) { delay(10); error = scd4x.readMeasurement(co2, temperature, humidity); if (error) { Serial.print("Error trying to execute readMeasurement(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); } else if (co2 == 0) { Serial.println("Invalid sample detected, skipping."); } } } void SgpRead(uint16_t &sraw, int32_t &voc_index, float &temperature, float &humidity){ sraw = sgp.measureRaw(temperature, humidity); voc_index = sgp.measureVocIndex(temperature, humidity); } 以下为tft刷新函数,每次仅局部刷新数据部分显示块 void TftRefresh() { // tft print function! tft.fillRect(60, 0, 60, 135, ST77XX_BLACK); tft.setCursor(60, 10); tft.setTextColor(ST77XX_RED); tft.setTextSize(2); tft.println(temperature); tft.setCursor(60, 35); tft.setTextColor(ST77XX_YELLOW); tft.setTextSize(2); tft.println(humidity); tft.setCursor(60, 60); tft.setTextColor(ST77XX_GREEN); tft.setTextSize(2); tft.println("null"); tft.setCursor(60, 85); tft.setTextColor(ST77XX_BLUE); tft.setTextSize(2); tft.println(co2); tft.setCursor(60, 110); tft.setTextColor(ST77XX_WHITE); tft.setTextSize(2); tft.println(voc_index); } tft端的数据采用中文显示,本代码将中文字转为位图,调用drawbitmap函数进行处理(处理方法可以看之前发的速通教程http://bbs.eeworld.com.cn/thread-1254565-1-1.html): const uint8_t PROGMEM str1[]= {0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00};/*"温",1*/ const uint8_t PROGMEM str2[]= {0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E};/*"度",1*/ const uint8_t PROGMEM str3[]= {0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8,0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00};/*"湿",0*/ const uint8_t PROGMEM str4[]= {0x10,0x00,0x10,0x00,0x3F,0xFC,0x20,0x00,0x4F,0xF0,0x80,0x00,0x3F,0xF0,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x0A,0x00,0x0A,0x00,0x06,0x00,0x02};/*"气",0*/ const uint8_t PROGMEM str5[]= {0x00,0x00,0x3F,0xFE,0x20,0x00,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x2F,0xFC,0x20,0x80,0x20,0x80,0x20,0x90,0x20,0x88,0x20,0x88,0x40,0x80,0x5F,0xFE,0x80,0x00};/*"压",1*/ 本项目实际完成了任务一在屏幕上显示中文的要求 基于板载按键和网页按键的rgb led控制系统介绍及关键代码说明: 本项目实现了板载按键控制板载led颜色变化,网页按键控制外接led阵列显示内容的效果。 loop函数轮询按键是否被按下,若按下则板载led开始变色(这里可以优化为按键中断,不过目前项目轮询也可以就没有修改) if (!digitalRead(0)) { TB.setColor(TB.Wheel(j++)); } 同时loop函数轮询esp32生成网页页面中的按键是否被按下,若按下则修改标志位 WiFiClient client = server.available(); if (client) { // if you get a client, Serial.println("New Client."); // print a message out the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); // the content of the HTTP response follows the header: client.print("Click <a href=\"/H\">here</a> to move LED.<br>"); client.print("Click <a href=\"/L\">here</a> to stop LED.<br>"); // The HTTP response ends with another blank line: client.println(); // break out of the while loop: break; } else { // if you got a newline, then clear currentLine: currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } // Check to see if the client request was "GET /H" or "GET /L": if (currentLine.endsWith("GET /H")) { go=1; // GET /H turns the LED on } if (currentLine.endsWith("GET /L")) { go=0; // GET /L turns the LED off } } 最后根据标志位和当前时间判断是否对外接led阵列上显示内容进行滑动 if ((((t=millis()%65536)-ledprevtime)>SHIFTDELAY)&&(go==1)){ matrix.fillScreen(0); matrix.setCursor(x, 5); for (byte i = 0; i < strlen(adafruit); i++) { // set the color matrix.setTextColor(adaColors[i]); // write the letter matrix.print(adafruit[i]); } if (--x < -50) { x = matrix.width(); } matrix.show(); ledprevtime = millis()%65536; } 本项目实际完成了任务二、任务三以及任务四的分任务二,实现了wifi生成网页和控制,板载按键的使用,板载rgb led使用,外接6*12led阵列的使用四个小项目 以上项目代码可以在这里找到:http://download.eeworld.com.cn/detail/Lucheni/629865 总结: 本次活动研究了基于esp32s3的wifi控制,led控制,传感器数据读取及中文显示,收获还是很多的,当然我个人最喜欢的还是这次活动的开发板,在小巧的feather版型上放下了tft彩屏,还板载电量计以及预留了温湿度传感器的焊接接口,双面布局,对于开发板而言是非常精致了,期待以后的活动能玩到更多更好的板子!  

  • 2023-11-13
  • 上传了资料: 得捷电子Follow me第2期 lucheni项目代码

  • 2023-10-31
  • 加入了学习《Digi-Key: Follow Me 系列(2) 直播回放》,观看 Adafruit ESP32-S3 TFT Feather开发板使用入门

  • 2023-08-31
  • 回复了主题帖: 【得捷电子Follow me第2期】任务1:控制屏幕显示中文

    jobszheng5 发表于 2023-8-31 09:43 现在商家的套路也很明显啊! 这一拖,不仅赚了钱,还省去了维修费了   话说:CircuitPython ...
    你可以理解为MicroPython的变种

  • 2023-08-29
  • 发表了主题帖: 【得捷电子Follow me第2期】Arduino速通教程

    本帖最后由 Lucheni 于 2023-8-29 14:41 编辑 本教程基于Adafruit 5693 ESP32-S3 Reverse TFT Feather(后简称Reverse板),与活动开发板Adafruit 5483 ESP32-S3 TFT Feather非常类似,但可能有细微电路差别,仅作为Arduino环境下的快速上手教程,具体使用请查阅Adafruit官方教程:Overview | Adafruit ESP32-S3 TFT Feather | Adafruit Learning System 若英文阅读有困难,推荐edge浏览器打开后使用自带翻译功能 本教程为速通教程,追求的是最快速地完成所有分支任务,并不适合想要刨根问底学习的开发者,若想要学习驱动原理或代码逻辑,请仔细阅读Adafruit官方教程 上手第一步:熟悉开发板 出厂Demo     拿到开发板的第一步可以使用Type-C数据线供电,此时开发板应如图显示,第一行为开发板名称(红色),第二行为例程名称(黄色),第三行为电量信息(绿色),usb供电下电量信息可能会显示超过100%,这是正常现象,第四行为板卡连接的I2C设备地址(蓝色),此板卡到货状态应该只焊接了MAX17048电池监视器,此传感器通信地址为0x36,此时屏幕上显示内容应为I2C:0x36 出厂例程Adafruit应该是基于Arduino环境编写的,官方也开放了Reverse板的出厂Demo代码:Factory Shipped Demo | Adafruit ESP32-S3 Reverse TFT Feather | Adafruit Learning System 清除老旧库文件 Arduino环境开发很容易出现硬件库冲突的情况,比如同事安装了tft_espi显示库和Adafruit官方显示库,编译过程中就有可能报错,所以建议先清除之前Arduino已安装的库文件,或将他们备份到另一个文件夹里,待本项目开发完毕后再恢复。 各人Arduino软件安装流程不同,库文件保存地址也不同,本例程参考默认保存地址为C:\Users\Lucheni\Documents\Arduino,库文件在此地址下的libraries文件夹下,建议备份后清空此文件夹。   安装相关库文件 此时可以安装Adafruit为此开发板相关硬件所设计的库文件,Arduino下安装库文件方式为工具-管理库   在搜索栏输入你想要的库文件,依次安装Adafruit MAX1704X,Adafruit ST7735 and ST7789 Library,安装过程中可能会询问是否安装所有依赖库,点击安装所有。   任务一:控制屏幕显示中文 屏幕显示测试 既然要显示中文,我们首先进行屏幕显示的测试,测试例程为文件-示例-Adafruit ST7735 and ST7789 Library-graphicstest_feather_esp32s2_tft   打开例程,选择开发板和串口号后就可以上传,此时开发板屏幕即开始显示测试,会显示不同尺寸、颜色的字符并显示不同的图形,以及最后的屏幕翻转显示。简单浏览代码可以发现Adafruit将繁杂的显示任务抽象为了简单的draw函数,显示文字为drawtext,显示像素为drawPixel,以及线以及各种形状的显示:drawFastHLine、drawFastVLine、drawCircle、drawTriangle。这些显示函数本次速通并不会使用,若想学习用法,请参考Adafruit官方教程:Graphics Primitives | Adafruit GFX Graphics Library | Adafruit Learning System 显示中文 对于速通教程来说,显示中文虽然是第一个任务,但可能是最难的任务,因为其他的任务都有Adafruit官方硬件库支持,而官方显示库仅能显示英文,中文显示需要自己一点点办法 对于常规的开发来说,显示中文的正常开发逻辑是先用第三方软件生成中文字库,之后导入到已有的显示库中,再逐一显示。但基于速通的目的,本教程采用了一点偷懒的办法~   由于任务1要求仅为显示中文,所以我个人认为在只需要显示几个中文字符的需求下,以位图显示中文相对简单直接,故本次速通教程将使用官方教程末尾的一个函数:drawBitmap。 生成中文字 本次生成中文字使用软件为正点原子开发板资料里的PCtoLCD2002,实际网上还有大量类似软件,Adafruit官方也推荐了位图-内存图的网页工具image2cpp (javl.github.io) 本速通教程仅显示四个中文汉字:中文显示 首先打开软件的设置菜单,对生成的格式进行设置,本次设置格式为:阴码、逐行式、C51格式 其他相关设置可以自己尝试,本次教程追求速通就不赘述了   选择确定,回到初始页面,在输入行输入本次需要显示的四个中文字符:中文显示(步骤①)   点击生成子模(步骤②)后下方即为本次需要使用的字符数据(步骤③) 按照教程使用PROGMEM指令将字符数据保存于内存中,再使用drawBitmap命令显示(drawBitmap函数6个参数分别为显示位置x,y,数据地址,位图宽度,位图高度,显示颜色)即可。 参考代码: #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789 #include <SPI.h> // Use dedicated hardware SPI pins Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); const uint8_t PROGMEM str1[]= {此处字符请按需自行生成!}; const uint8_t PROGMEM str2[]= {此处字符请按需自行生成!}; const uint8_t PROGMEM str3[]= {此处字符请按需自行生成!}; const uint8_t PROGMEM str4[]= {此处字符请按需自行生成!}; void setup(void) { Serial.begin(9600); delay(500); Serial.print(F("Hello! Feather TFT Test")); // turn on backlite pinMode(TFT_BACKLITE, OUTPUT); digitalWrite(TFT_BACKLITE, HIGH); // turn on the TFT / I2C power supply pinMode(TFT_I2C_POWER, OUTPUT); digitalWrite(TFT_I2C_POWER, HIGH); delay(10); // initialize TFT tft.init(135, 240); // Init ST7789 240x135 tft.setRotation(1); tft.fillScreen(ST77XX_BLACK); Serial.println(F("Initialized")); uint16_t time = millis(); tft.fillScreen(ST77XX_BLACK); time = millis() - time; Serial.println(time, DEC); delay(500); // large block of text tft.fillScreen(ST77XX_BLACK); // tft print function! tft.drawBitmap(0, 0, str1, 16, 16, ST77XX_WHITE); tft.drawBitmap(16, 0, str2, 16, 16, ST77XX_WHITE); tft.drawBitmap(32, 0, str3, 16, 16, ST77XX_WHITE); tft.drawBitmap(48, 0, str4, 16, 16, ST77XX_WHITE); Serial.println("done"); delay(1000); } void loop() { tft.invertDisplay(true); delay(500); tft.invertDisplay(false); delay(500); } 显示效果如下(loop中加入了翻转显示,实际为底色和字符黑白交替显示):       任务二:网络功能使用 此任务可直接使用官方例程:示例-WiFi-WiFiAccessPoint   从注释可知本例程使用方式:  WiFiAccessPoint.ino创建一个WiFi接入点,并在其上提供一个网络服务器。  步骤:  1.连接到接入点“yourAp”  2.将您的网络浏览器指向http://192.168.4.1/H打开LED或http://192.168.4.1/L把它关掉或在PuTTY终端上运行原始TCP“GET/H”和“GET/L”,IP地址为192.168.4.1,端口为80 注意!!!!!!请按需修改ssid及password,例程的LED管脚并不是活动板卡的LED管脚,请自行修改,LED管脚号请参考官方例程:Pinouts | Adafruit ESP32-S3 TFT Feather | Adafruit Learning System 任务三:控制WS2812B 此任务可以直接从factory_test源码修改完成,以下仅展示LED显示关键代码 void setup() { TB.neopixelPin = PIN_NEOPIXEL;//板卡连接WS2812B引脚号 TB.neopixelNum = 1; //板卡连接WS2812B数量 TB.begin(); TB.setColor(WHITE);//设置LED为白色 } void loop() { TB.setColor(TB.Wheel(j++));//LED颜色循环显示 delay(10); return; } 任务四:WS2812B效果控制 既然为速通教程,我选择了最易实现的分任务2,使用Adafruit官方的https://www.adafruit.com/product/3449,直接使用官方例程示例-Adafruit_DotStarMatrix-dotstar_wing(记得修改例程中的开发板型号,否则需要重新烧写固件!)   简单修改显示内容后即可显示自己想要的内容:     此任务若追求速度,也可选择分任务4,使用Adafruit的音乐播放器模块:https://www.adafruit.com/product/3357,Adafruit也有基于此模块的详细例程,能很快上手。

  • 2023-08-28
  • 回复了主题帖: 【得捷电子Follow me第2期】CircuitPython入门到完成任务1-5详细教程

    ttxiaotaoge 发表于 2023-8-24 16:35 这个没有,我没买那些设备
    Adafruit有music maker模块的,资料例程也都有,去官网搜下看下资料然后国内找类似的就行

最近访客

< 1/1 >

统计信息

已有1人来访过

  • 芯积分:27
  • 好友:--
  • 主题:2
  • 回复:5
  • 课时:1
  • 资源:1

留言

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


现在还没有留言