- 2024-11-15
-
回复了主题帖:
【2024 DigiKey创意大赛】+智慧焊接工作台
秦天qintian0303 发表于 2024-11-15 10:27
光强传感器一般都是IIC的接口,直接接个扩展板就行,一般地址都不一样
对,他这个IIC上也挂了不少设备了
- 2024-11-14
-
回复了主题帖:
【2024 DigiKey创意大赛】+智慧焊接工作台
秦天qintian0303 发表于 2024-11-11 23:26
加个智能调光,来个光强传感器,然后自动调光,保证工作台亮度
这块板子IO太少了,给屏占了太多,得外拓了
- 2024-11-11
-
加入了学习《2024得捷电子设计大赛-时光照相机》,观看 时光照相机
-
加入了学习《【2024 DigiKey创意大赛】+智慧焊接工作台》,观看 智慧焊接工作台
-
加入了学习《【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统》,观看 【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-作品提交
-
加入了学习《基于树莓派5的工业智能网关视频》,观看 得捷2024大赛基于树莓派5的智能工业网关视频
-
发表了主题帖:
【2024 DigiKey创意大赛】+智慧焊接工作台
本帖最后由 流行科技 于 2024-11-11 22:35 编辑
智慧焊接工作台
作者:流行科技
一、作品简介
上面两张是本次比赛用到的板卡,一个是ESP32-S3配备86屏幕的方案。还有一个是IIC通信的人存在传感器。外加上WS2812B的灯带,基本组成本次项目的功能。
系统框图
本次方案的框图如上,智慧焊接工作台,主要是集成调光,控电源,因为我们焊接不一定是长时间在那个地方的,所以通过人存在传感器可以探测人离开焊接台了,通过逻辑,可以实现断电,关灯效果,同时我们的86面板可以显示一些信息,如联网探测天气,实时时间等功能。
三、各部分功能说明
首先是其灯的功能,我们用ESP给的LED库进行开发,给他做一个独立的任务,开关灯。并且是做了相应的处理以便在屏幕上操控。
LVGL也是一个单独的任务,同时我们自己弄了下NXP的工具,让其生成的代码可以用在ESP32的环境中。
开关灯是做在了事件中。
人识别的传感器读取数据,通过LVGL中进行获取,同时给了两种状态的显示,存在为实图。
整体界面做的稍微简单了点,因为一些功能还未添加,如获取天气,和时间信息。
人体存在传感器是有很多信息的,包括了他选框的信息。我们用的话只用了他其中一个信息,就是多少张脸的信息。
看其打印信息是可以检测多张脸的。
四、作品源码
五、作品功能演示视频
六、项目总结
本次项目还有一些未完善细节,但整体思路有了,同时各方驱动也都有了,结合实践加上wifi联网可以获取到时间,之后天气这些也就比较简单了,ESP32开发方式多种多样,我选择的是idf方案,还有Arduino方案等等,多种多样,开发起来也能够快速上手。人存在传感器需要在特定的角度下检测人脸,可以辅助一些其他探测设备,感知人的存在。同时接口原因,相信后期通过配合其他开发板进行蓝牙通信交互可以使用其他调灯方案。本次这个模块主要被屏幕占用了多数IO,导致自身可以使用的IO就少了。
七、其他
我将后续继续完善wifi这块,早日完成其他功能。
- 2024-10-29
-
回复了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+开发工具功能体验
haha1998 发表于 2024-10-8 14:11
第一个图片是野火那个文档呀
各家都用的开源界面
- 2024-10-23
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+LVGL加上温湿度传感器显示
首先就是我们要把串口测试SHT20例程转换为自己读取,加到任务线程中,我这里就取巧了,直接用原来的东西。简单修改下。
首先给其初始化,做到快捷的初始化中,INIT_APP_EXPORT()也就是这个函数。
然后里面做一个线程任务。然后启动。
启动后就是打印读取数据。
效果如上。
然后改下我们的GUI工程,增加两个Label显示。
之后又两个方案了,一个是直接调用更新显示数据,一个是通过事件,两种都是可以的。
通过事件就是添加,让其自己生成代码,然后我们利用既可。
第一种方法是事件,第二种就是直接更新显示,都可以。
实际事件还复杂一点最终的功能都一致。
效果如下:
- 2024-10-20
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+构建自己的LVGL例程
我们在测试LVGL例程后我们肯定是要自己能够添加自己的例程的。方便自己后期使用做项目。接下来就添加下案例,本案例先通过构建我们显示项目,再添加我们的驱动。
我们用GUI Guider 工具,这是一款NXP开源的基于LVGL的一款设计器,用他能方便生成工程。
我们选择空白工程进行测试。添加一个Label让其显示。
我们的是LVGL,V8.3.1,这个版本提供的是V8.3.5一样可以用。
这里按照屏幕分辨率自定义为1024x600。
编译后导出。
选择RT-Thread即可。
路径上选择这个,新建的demo里面。
建立两个文件初始化。
#include <unistd.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include "lvgl.h"
#include "aic_ui.h"
#include "lv_port_disp.h"
#include "mpp_fb.h"
/* gui guider head file */
#include "./custom/custom.h"
#include "./generated/gui_guider.h"
#include "./generated/events_init.h"
#include "./generated/widgets_init.h"
#include "./generated/guider_customer_fonts/guider_customer_fonts.h"
#include "./generated/guider_fonts/guider_fonts.h"
lv_ui guider_ui;
void sht20_demo_ui_init()
{
/* 用户APP 入口 */
setup_ui(&guider_ui);
events_init(&guider_ui);
custom_init(&guider_ui);
}
主要是c文件,我们为了不变动其他文件夹给其全部添加到头文件中。
路径下放一个Sconscript文件这样才能编译。
Application下要添加一个编译选项,同时选择上他。
在aic_ui.c中也添加上函数入口。
然后就是编译下载测试。
- 2024-10-16
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+SHT20读取测试问题总结
目前下来看测试I2C0的还是在读取部分有点问题。先看波形。
整体是这样的,在函数中有两个读取函数,但是第二个函数等于未发出。
看细节,第一个发送函数结束,应该再开始发送读取温度的寄存器,然后读,结果还是直接读,接着读到的是湿度寄存器的数值。
从计算公式中可以推出来。
所以就有很大的问题了,这个读的就不对的。
从读取函数来看也是正常的,主要是系统的GT911是正常的。都是用的相同函数。
我在中间加了一个延时,这样两个都能发出来了,也都是正确的,但是读不到数据,读取到的也是错误的。
关键函数还是在RT-Thread的里面。
因为SHT20有个特性,就是读取转换时要耗费时间,我们通过函数进行追踪,找到实际发送函数,这里面有定义超时,我们给其加大,原本是10,给加大到1000。编译之后刷写进去,就正常了。
是正确的。至此解决了I2C读取问题。
- 2024-10-14
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+RTOS中的LVGL使用
好多都人一开箱就用的RTOS,我开始还是想着使用裸机的,但是看到裸机的开发和RTOS基本差不多了,都挺复杂的,所以看了下RTOS的适配的驱动还多,关键例程中触摸也是好的,所以想着先换,然后自带例程是和裸机一样的,所以要搞一个测试例程可以测试其触摸驱动是OK的。
我选择的是一个播放器例程,遇到许多问题。
资源路径需要修改下。
Demo例程选择下。
编译会出现两个问题,一个是rodata在SARM_S0中不够。选择PSRAM。
建议这些全部替换为PSRAM,PSRAM比SRAM大许多。
另一个需要我们修改我们的存储配置,也是数据在norfalsh中大小。这里也体现了大存储的优势了。
在此路径下找到image_cfg.json修改。
我让其到4m大小打包就没有问题了。
然后编译烧写,在启动中可以看到GT911驱动加载了。
触摸功能也是正常的,后续我们自己开发就方便多了。
- 2024-10-13
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+前LVGL例程问题勘误
之前在测试LVGL的案例中,GIF的显示有问题,是资源文件路径问题,导致没有显示的。
在此路径中需要修改成对应的demo路径这样他才会把相关资源编译整合到img中。
彩色条纹是boot中测试的例程,证明驱动屏幕是没问题的。
这样显示才是正确的。
- 2024-10-10
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+PWM输出测试
开发板的IO中预留出了一个PWM控制的无源蜂鸣器,要驱动他必须外部给一个震荡的频率,所以此次我们修改例程增加上我们的测试函数。
首先还是到配置里面增加上我们的PWM基础包。这样BSP里面就会生成PWM操作函数。
测试中添加命令串口命令测试函数,这样就能测试了。然后生成测试工程。
scons --target=eclipse生成eclipse测试工程,这样方便修改代码。
我们看下其目录结构是增加了两个文件,从现有的文件中过来的。
Main函数中主体还是围绕着之前的LVGL来的,我们给其注释了,让其运行后面的函数。
最后面执行的就是这个串口终端。
测试函数编译时也有错误,是其BSP增加参数了,所以需要我们给其增加一个参数。
当我们使能PWM1输出时,硬件做好了IO初始化,其复用也改好了。
刷完进入系统即可。然后用指令测试。
可用示波器测量输出。
- 2024-09-03
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+开发工具功能体验
一.快速体验功能。
拿到板子肯定要上电要修改下我们的demo接着下面的体验。所以快速入门,我们先看给的案例。
快速入门先选择我们的裸机进行体验,先拉取代码。
git clone https://gitee.com/artinchip/baremetal.git
国内的源比较快就能拉取下来。
这个框架下就有两个命令行进行工程操作的。
env是RT-Thread出来的工具,CMD是Win原生工具,功能更加强大。基本使用二者都一样。
主要就是配置,然后选择,进行编译。
可以用配置命令。scons --menuconfig。这搞的比较像Linux开发了。
我们初始就是一个LVGL的Demo然后我们可以切换一个Demo进行测试。也要记住这个路径尽量不要中文,还有太长的路径。
完成配置就这样。
直接进行编译,我们要选择我们对应的demo,之前我是选择好了的。
这就是我们选择好的demo和路径。
接下来就是烧写了。
工具烧录。
我们用单机烧录的就行,不需要使用量产工具。
使用USB烧写。
有时候找不到我们的设备,我们需要检测下环境。
检测到设备就能烧录了。
完成后就可以看下效果,和出厂的demo不一样了。
- 2024-08-23
-
回复了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+开箱
御坂10032号 发表于 2024-8-23 09:06
我淘宝上下单买个了AP6212 到了焊上去看看
那要自己搞驱动了
- 2024-08-21
-
发表了主题帖:
【工业级智能控制MCU 匠芯创D133CBS】+开箱
芯片介绍
我们先看下此次的芯片,可以看到这是一颗RISC-V指令集的芯片,实际是以平头哥E907内核开发的一款MCU,主要内置了比较大的Psram,同时外部点屏能力很强,支持接口比较多,MIPI 4lane和LVDS单通道在MCU上还是比较少见的。
其实这款芯片比较像全志的D1S\F113,然后开发上也比较的特殊,也比较像往LINUX上靠。提供的工具等。
板子开箱
板子是一块7寸屏幕做的比较像迪文屏的那种,板载是有很多功能,因为没有使用RGB的接口,使用的是LVDS和MIPI屏幕,板子接的是LVDS的屏幕。所以很多接口都预留出来了。有网口和485,CAN,TTL,USB,SD卡,按键蜂鸣器等。
屏幕上也是用了一个框,这样不用直接紧贴PCB,PCB板可以使用插件。
硬件梳理
核心为D133CBS,外部用了两个晶振,同时用了一个NOR Flash,用来存程序。
此芯片接口少于D133EBS,其他配置都一样。
里面是有一个MIPI接口预留,同时核心供电是有3.3V,1.8V,1.1V,其中1.8V可以由内部的LDO产生。其他就一些外设功能了。
- 2024-08-08
-
发表了主题帖:
【2024 DigiKey 创意大赛】SEN-21231和ESP32-S3-LCD-EV-BOARD开箱
本次大赛选择了必选物料SEN-21231和ESP32-S3-LCD-EV-BOARD,SEN-21231是一个可以监测人存在的传感器,ESP32-S3-LCD-EV-BOARD是一块86开发屏。下面就看下他们把。
包装还是很独特的,专门设计的。
板子是分两部分的一个底板,实际可以接两种屏幕,我们这种事86面板屏,还有一个横屏那种,唯一缺点就是这款板子用做屏幕后,接口就很少了。
底板主要就是一个ESP32-S3的核心板。
人存在的传感器,是用了摄像头,其实也是用的ESP32-S3芯片,然后通过IIC接口进行数据输出。
这个板子特别的小,不占用空间。
还购买了一个温湿度传感器。
- 2024-08-06
-
回复了主题帖:
测评入围名单: 工业级智能控制MCU 匠芯创D133CBS,追加了3块
个人信息无误,确认可以完成测评分享计划.
- 2024-03-24
-
发表了主题帖:
【得捷电子Follow me第4期】基础任务二(补充):RA-08H板子做显示
我是申请了第二块板子,作为开发用的,有些可能买了模块,我觉得模块没啥性价比,选开发板,然后通过串口接受数据,进行显示。
RA-08H也是树莓派RP2040的芯片,驱动了一个1.8寸的显示屏幕。所以从开发上来说,和W5500-PICO是一样的。
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
// #include "SoftwareSerial.h"
// SoftwareSerial uart1(8,9);//串口定义
#include <SerialPIO.h>
#define txpin 0
#define rxpin 1
#define fifosize 32
SerialPIO mySerial(0, 1); // 创建SerialPIO对象
#define TFT_CS 17
#define TFT_RST 22 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC 16
#define TFT_MOSI 19 // Data out
#define TFT_SCLK 18 // Clock out
#define TFT_BL 23
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
void setup() {
Serial.begin(9600);
// uart1.begin(115200);
Serial.print(F("Hello! ST77xx TFT Test"));
pinMode(TFT_BL, OUTPUT);
// put your setup code here, to run once:
// OR use this initializer if using a 1.8" TFT screen with offset such as WaveShare:
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, green tab
digitalWrite(TFT_BL, HIGH);
mySerial.begin(115200);
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
}
String receivedData; // 存储接收到的字符流
void loop() {
// put your main code here, to run repeatedly:
// tft.setTextWrap(false);
// tft.fillScreen(ST77XX_BLACK);
static unsigned long startTime = millis(); // 记录起始时间
while (mySerial.available()) { // 检查是否有可用数据
char data = mySerial.read(); // 读取串口接收到的数据
receivedData += data; // 将数据添加到接收到的字符流中
startTime = millis(); // 重置起始时间
}
// 检查超时
if (millis() - startTime >= 2000) {
if (receivedData.length() > 0) {
// Serial.print("Received: "); // 通过USB CDC打印接收到的数据
// Serial.println(receivedData);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_RED);
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setTextSize(1);
tft.println(receivedData);
receivedData = ""; // 清空接收到的字符流
}
startTime = millis(); // 重置起始时间
}
}
我们先做好这边的驱动。
红色框是串口0,我们通过初始化,完成其接收数据功能,然后加入屏幕驱动,接收到的数据让其显示到屏幕上。
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SerialPIO.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 2, 177);
unsigned int localPort = 8888; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // a string to send back
// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
#define txpin 0
#define rxpin 1
#define fifosize 32
SerialPIO mySerial(0, 1); // 创建SerialPIO对象
void setup() {
// You can use Ethernet.init(pin) to configure the CS pin
//Ethernet.init(10); // Most Arduino shields
//Ethernet.init(5); // MKR ETH shield
//Ethernet.init(0); // Teensy 2.0
//Ethernet.init(20); // Teensy++ 2.0
//Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet
//Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet
Ethernet.init(17); // WIZnet W5100S-EVB-Pico W5500-EVB-Pico W6100-EVB-Pico
// start the Ethernet
Ethernet.begin(mac, ip);
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// start UDP
Udp.begin(localPort);
mySerial.begin(115200);
}
String SenddData; // 存储接收到的字符流
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.print("Received packet of size ");
SenddData += "Received size:";
Serial.println(packetSize);
SenddData += packetSize;
SenddData += "\r\n";
Serial.print("From ");
SenddData += "From:";
IPAddress remote = Udp.remoteIP();
for (int i=0; i < 4; i++) {
Serial.print(remote[i], DEC);
SenddData += remote[i];
if (i < 3) {
Serial.print(".");
SenddData += ".";
}
}
Serial.print(", port ");
SenddData += ", \r\nport ";
SenddData += "\r\n";
Serial.println(Udp.remotePort());
SenddData += Udp.remotePort();
SenddData += "\r\n";
// read the packet into packetBufffer
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
Serial.println("Contents:");
Serial.println(packetBuffer);
SenddData += "Contents:\r\n";
SenddData += packetBuffer;
mySerial.println(SenddData);
SenddData="";
// send a reply to the IP address and port that sent us the packet we received
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
delay(10);
}
同样修改w5500这边的代码,这边代码主要就是添加了串口0初始化,以及串口数据的一个整理发送。
完成后效果就是他可以接受到UDP数据,然后通过串口发送,内容是UDP发送端的信息,IP和端口,然后发送的内容,发送内容中间加了那个换行有点问题,显示的。
从这边接受到显示的内容其实就是乱码的。所以屏幕上显示的也是乱码的。
除了这个功能,也可以直接用串口发送数据显示。也算便携串口显示了,没电脑的时候可以看下,不过目前没有支持中文显示。