- 2024-05-24
-
回复了主题帖:
【2023 DigiKey大赛参与奖】开箱帖+m5stacl caed+m5stack c3
lugl4313820 发表于 2024-5-14 17:58
你这个多少钱呀,我那个买来就吃灰了。
computer那个价格贵一些,小200吧
-
回复了主题帖:
【2023 DigiKey大赛参与奖】开箱帖+m5stacl caed+m5stack c3
秦天qintian0303 发表于 2024-5-14 20:31
这个小套件感觉很有趣啊
是的,特别是那个computer套件,可以当无线或者有线键盘,免驱
-
回复了主题帖:
【2023 DigiKey大赛参与奖】开箱帖+m5stacl caed+m5stack c3
dcexpert 发表于 2024-5-14 21:00
m5stack 公司被乐鑫收购了
是的
- 2024-05-14
-
发表了主题帖:
【2023 DigiKey大赛参与奖】开箱帖+m5stacl caed+m5stack c3
# 【2023 DigiKey大赛参与奖】开箱帖+m5stacl caed+m5stack c3
首先,感谢得捷社区,本次参与奖我选取的是m5stack cardcomputer+m5stack c3,m5stack被乐鑫已经收购了,他们的产品我觉得精致小巧,正好m5stack cardcomputer他拥有usb有线连接和蓝牙连接的键盘功能,对于开发板的一些输入指令什么可以就使用这个来进行,十分的方便,而m5stack c3也是比较小巧,用来以后平时使用也比较方便。
- 2024-04-08
-
回复了主题帖:
Longan Pi 3H 开发板(基本介绍)
damiaa 发表于 2024-4-8 11:59
这么小。看起来不错。
是的
-
回复了主题帖:
Longan Pi 3H 开发板(基本介绍)
LitchiCheng 发表于 2024-4-8 17:20
背面两个M.2的插槽是什么接口的,可以扩展nvme吗,pcie的?
插槽是插芯片的,他是类似金手指一样,他公司设计风格一般都是这样,或者别的芯片是btb
-
回复了主题帖:
Longan Pi 3H 开发板(基本介绍)
tagetage 发表于 2024-4-8 11:08
芯片选的挺好,是H618,性能可以,还便宜。但是这个电路板怎么设计的,CPU采用了插座的方式安装。电路板设计 ...
我感觉挺好看的
-
发表了主题帖:
Longan Pi 3H 开发板(基本介绍)
本帖最后由 wuboy 于 2024-4-8 09:49 编辑
# Longan Pi 3H 开发板
## 开箱内容
打开包装,你可以看到以下物品
1. 一个Longan Pi 3H盒子
2. Longan Pi 3H开发板
## 产品基本介绍
Longan Pi 3H 是基于 Longan Module 3H 核心板的 ARM Linux 开发板,以 H618 (Quad core ARM Cortex-A53@1.5Ghz , 64-bit) 为主控核心,板载最大 4GB 64bit LPDDR4,支持 HDMI 4K 显示输出。支持千兆网口,板载 wifi6/BT。
主控参数
主控芯片
H618
CPU 处理器
ARM Cortex-A53@1.5Ghz · 每核支持 32 KB L1 I-cache + 32 KB L1 D-cache · 四核共享 1MB L2 Cache
图形处理器
Arm Mali-G31 · OpenCL 2.0· OpenGL ES 1.0/2.0/3.2· Vulkan 1.1
视频解码器
· 支持 H.264 BP/MP/ HP@L4.2 解码,最大 4K 分辨率· 支持 AVS2 JiZhun 10bit 解码,最大 4K 分辨率 · 解码性能最大 4K@60fps
视频编码器
· 支持 H.264 BP/MP/HP 编码,最大 4K 分辨率· 仅支持 I 帧和 P 帧· 编码性能最大 4K@25fps
硬件特性
RAM
· 1/2/4 GB 64bits LPDDR4
存储
· eMMC: 可选空贴、32G· 支持 TF 卡
以太网
· 千兆以太网接口
USB
· 2 x USBA Host · 1 x USBC OTG
显示接口
· 1 x 标准 HDMI 接口
GPIO
· UART· IIC· SPI
### 硬件资料下载
[LonganPi3H硬件资料](https://dl.sipeed.com/shareURL/LONGAN/LonganPi3H)
## 简约风格的底座设计(已经分享到maixhub分享中)
为了怕博主自己马虎不小心把让底部器件什么导电,所以就只设计了一个底座,上部分应该不太好导电,而且上面部分露出了也好看。
这是官方的step文件:[官方的step文件](https://dl.sipeed.com/shareURL/LONGAN/LonganPi3H)
软件是利用solidworks画的,这是stl文件链接:
链接:https://pan.baidu.com/s/1d1pQBoDtDptA0vc__GnHZg
提取码:deb2
孔大概是m2.7的孔径,
实物图:
## 烧录系统并配置ssh
博主手上的是4g+32g的版本,但是emmc出场系统有下面wifi消失的问题,但是20240407的系统只要命令行的没有安装桌面,如下
最后博主通过SD卡烧录0228版本镜像
### 配置ssh
```
apt update
apt install ssh openssh-server
vim /etc/ssh/sshd
修改 PermitRootLogin yes
service sshd restart
```
- 2024-01-31
-
回复了主题帖:
“年终总结”+不忘初心
wangerxian 发表于 2024-1-30 14:21
又一位大佬将步入社会~加油!
加油
-
回复了主题帖:
“年终总结”+不忘初心
okhxyyo 发表于 2024-1-30 14:32
加油!!!!非常充实的一年呀~~~~
加油
-
回复了主题帖:
“年终总结”+不忘初心
freebsder 发表于 2024-1-30 11:56
新的一年再循环!
再接再厉
-
回复了主题帖:
【年终总结颁奖】2024,让我们保持热爱,奔赴下一场山海!
已确认个人信息无误
- 2024-01-30
-
发表了主题帖:
“年终总结”+不忘初心
## “年终总结”+不忘初心
### 2023年EEWorld总结记录:
2019 年加入EE大家庭,在 2023 年底才记得在该平台创建账号,而且平台有这么多丰富的活动,在学校中一般都是听老师说的,没自己去了解,还好不晚,在 2023 年发现有这么好的社区平台, 2023 年总共发表了 14 篇帖子,回复了 17 个帖子,上传了 4 个资源,参加了 2 个活动。
### 晒晒我的痕迹:
#### 参加活动:
(1)【DigiKey“智造万物,快乐不停”创意大赛】工地安全检测移动装置
(2)【玄铁杯第三届RISC-V应用创新大赛】(注明:当时是了解到官方参加的活动,后续知道eeworld社区有平头哥板块就同步分享了)
#### 发表日常学习的帖子:
(1)关于爱芯派pro的开发板yolov5s模型训练部署以及yolov8s模型训练部署、日常使用
(2)安信可开发板的使用介绍
(3)玄铁杯的一些碰到问题的解决方法
#### 上传资源:
【DigiKey“智造万物,快乐不停”创意大赛】工地安全检测移动装置相关solidworks文件和相关代码
### 2023年个人总结:
#### 完成的目标
##### 在学校里面
(1)课业方面:课程课业都完成,学业奖学金也拿到了。
(2)竞赛方面:自己本身是很喜欢比赛的,在读研时候以为不会有参加比赛的计划了,可能说运气比较好吧,好朋友找我组队参加第十八届研究生电子设计大赛,最后获得华中赛区二等奖,也算是给研究生生活在竞赛方面充实了一下吧,当然这个竞赛加分也是有助于拿到学业奖学金。
(3)项目上:老师安排的项目都给他完成并达标通过甲方测试。
(4)运动上:院里的篮球比赛也拿到奖牌,队友太厉害了。
##### 在EEworld社区
(1)日常学习中:在评测中看到自己喜欢的开发板积极申请,但是没选中,在年底申请中申请到了可见光光谱传感器,当然本来课题组就是有一个项目是油污检测,所以申请上了,很感谢社区,在2023结束终于打破了0申请成功,哈哈哈哈。
(2)活动:参加了得捷大赛以及玄铁杯,并都按时完成提交了项目,发挥了自己爱好以及锻炼了自己的能力。
#### 学到的新知识
(1)docker的使用、挂代理以及如何交叉编译工具链的搭建,搭建交叉编译环境,例如模型的量化往往不一定和开发板的环境保持一致,有可能开发板是debian系统,而量化工具是x86.
(2)模型的训练量化,虽然学校有集群,但是自己没去接触过,通过集群调用gpu进行训练,标注数据集,以及VOC转YOLO格式等等
(3)在完成功能同时应该保证美观,不论是建模还是画PCB等等
#### 工作和生活的变化
##### 在学校给老师工作的变化
(1)从帮忙变成了项目主心骨
(2)老师派的活也变多了
##### 在学校生活的变化
(1)生活慢慢变得单一,由于项目上事情多了后,出去玩的时间就少了,虽然高效完成,但是室友有的都出差在外了,然后人少了后就聚的少了。
(2)生活渐渐变得三点一线,实验室、食堂和宿舍,周末就可能会出去看看电影或者吃吃饭。
#### 给我留下了深刻的印象的人
##### 学校中
(1)我的同门阿伟,他是一个很开朗热情的人,我们暑期被老师留学校一段时间出差去甲方公司都是他陪着我的,当出问题我们思考问题,探索问题出在哪里时候,也是他在我旁边;去食堂吃饭他会骑小电驴载我,当我需要帮忙时候,他会积极帮助我;在酒桌饭局时候,他会提醒我酒精中毒,总之,在学校的生活中,他给了我极大的帮助和鼓励。
(2)我的大二学弟,他也是一个积极向上的人,他有时候会喊我去citywalk或者出去玩吃饭看电影,然后他会发龙图,哈哈哈哈,和他们在一起感觉很放松,青春的感觉,哈哈哈哈,我比较失落时候,他会安慰鼓励我,所以,很感谢能够有这么好的一个学弟。
(3)我的表兄弟们,我时常不开心会喊他们出来玩团建,当然他们会喊我去他们学校转转,爬珞珈山,哈哈哈,所以排解压力和不开心的情绪。
##### 社区中
(1)得捷大赛中,由于订单忘记备注“得捷大赛”,得捷板块的工作人员教我怎么做,然后最后弄好了
(2)平头哥社区管理,人真的很好,然后当时申请还给我意见,希望以后有机会,人太好了。
### 2024整装出发
目标:找到自己的想要的实习工作,去到大学寝室长的那个公司,完成毕设开题,多多参加社区活动,同时也给学弟学妹普及一下社区有很多活动,让他们也积极踊跃参加,希望天天开心!
祝EEworld社区越来越好!
- 2024-01-17
-
回复了主题帖:
领取审核名单(第五批): 辞旧,年底清仓,100+板卡来袭,有缘来领
个人信息无误,已知晓需自己支付邮费
- 2024-01-10
-
回复了主题帖:
辞旧:年底清仓,100+板卡来袭,有缘来领
申请:DFRobot AS7341可见光谱传感器测评试用(DFROBOT sew0364),用微信支付运费。
我看了改传感器的介绍,可以粗略测量8个可见光通道,我在学校做的是油污检测,利用激光去激发油污反射出荧光,我想看是否能够通过该传感器去测量八个通道的荧光强度来区分油污种类,不同油品对激光的激发得到的荧光波长是不一样的,所以我想将该模块应用在上面,作为油品识别,达到区分油品种类的方法,我会好好将其应用在学校的项目上。
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】工地安全检测移动装置
chejm 发表于 2024-1-3 16:21
楼主提供的技术方案内容很详实,图文并茂,技术方案有很大的实用价值,问一下楼主,该技术方案识别的准确率 ...
准确率如果是数据集多,准确会高不少,处理速度还行,基本可以1s 10帧率
- 2024-01-02
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】工地安全检测移动装置
wangerxian 发表于 2024-1-2 09:38
那目前是通过什么主控去识别的?
k210,得捷商城买的
- 2024-01-01
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】工地安全检测移动装置
wangerxian 发表于 2023-12-30 12:58
直接通过esp32进行安全帽识别吗
esp32理论可以,可以用tinyml,但是毕竟没有npu,纯cpu去算,帧率应该也会很低
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】工地安全检测移动装置
吾妻思萌 发表于 2023-12-31 23:23
你那个键盘得发来瞅瞅,看起来好好看啊
【淘宝】https://m.tb.cn/h.5oU0NjB3Coa4Vz3?tk=FQekW6fEGFQ CZ3457 「acer宏碁静音非无声键盘鼠标台式电脑办公打字专用键鼠套装宏基」
点击链接直接打开 或者 淘宝搜索直接打开
- 2023-12-29
-
发表了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】工地安全检测移动装置
# 工地安全检测移动装置
作者:wuboy
## 项目背景
随着工业化进程的加速和建筑业的发展,机器人在工业和建筑领域的应用越来越广泛。对于建筑工地,开发一种高效、准确、安全的巡检技术,在工业和建筑现场,员工经常需要佩戴安全帽以防止头部受伤。安全帽识别技术可以帮助监测工作人员是否正确佩戴安全帽,以确保他们在危险环境中的安全。许多国家和地区都有法规和规范要求在特定环境中佩戴安全帽。安全帽识别技术有助于确保企业和个人遵守这些法规,降低事故风险。在大型工地或生产场所,实时监测员工是否佩戴安全帽对于管理人员来说是一项重要任务。安全帽识别系统可以自动执行这一任务,提高监控效率。机器人采用麦克拉姆轮,方便机器人能够实现多方位的平移,方便巡检识别工作的进行,以实现更加智能、高效的工作方式。在巡检识别方面,机器人可以通过搭载摄像头,实现对工作人员是否佩戴安全帽进行检测。
机器人巡检技术的发展,可以有效地提高工业和建筑领域的生产效率和质量,降低人工成本和安全风险。具体来说,机器人巡检可以代替人工进行工业设备和建筑物的巡检,提高巡检效率和准确性,降低人工巡检的安全风险。安全帽识别技术有助于预防意外事故,特别是那些可能导致头部受伤的事故。通过及时发现并纠正未佩戴安全帽的情况,可以降低事故发生的可能性。自动化的安全帽识别系统可以替代人工监测,提高工作效率。这对于大型工地或需要频繁监测的场所尤为重要。安全帽识别技术有助于确保企业和员工遵守安全规定,提高工作场所的合规性。此外,对于一些特定行业,未佩戴安全帽可能导致责任问题,因此及时的安全帽识别有助于规遍责任。通过防止事故的发生,安全帽识别技术可以帮助降低企业的人身伤害成本,包括医疗费用、赔偿金和法律费用。安全帽识别技术在提高工作场所安全性、遵守法规、降低事故风险以及提高管理效率方面具有重要意义。
## 作品简介
本项目利用视觉检测人是否佩戴安全帽,如果未佩戴安全帽将记录下来,上传到onenet云平台,通过TCP协议图传到电脑实时图像,装置利用麦克拉姆轮便于移动,控制通过esp_now协议控制,低延迟控制。本项目利用solidworks设计了二维云台结构连接上maixduino视觉模块,用户通过按红外遥控让红外遥控接收器接收到后,二维云台能够进行两个自由度的运动,让视觉处理器能够运动去检测安全帽。用户通过按红外遥控让红外遥控接收器接收到,控制小车的前进后退,当视觉处理器识别到是否佩戴安全帽会显示在lcd显示屏、电脑显示屏,当识别到佩戴安全帽后会上传到onenet云平台,本项目所有器件构成都来自得捷商城,以及全部应用到上面。
图1 作品图
### 作品项目用到的板卡
#### ESP32-S3-DevKitC-1
ESP32-S3-DevKitC-1 是一款入门级开发板,搭载 Wi-Fi + Bluetooth® LE 模组 ESP32-S3-WROOM-1、ESP32-S3-WROOM-1U 或 ESP32-S3-WROOM-2。
参考链接:[乐鑫ESP32-S3-DevKitC-1](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html)
图2 ESP32-S3-DevKitC-1
图3 ESP32-S3-DevKitC-1实物图
#### ESP32-C3-LCDkit
ESP32-C3-LCDkit 是一款基于 ESP32-C3 芯片和 SPI 接口显示屏的评估开发板,不仅通过旋转编码器开关实现屏幕交互,还具有音频播放和红外无线控制功能。由于 ESP32-C3 具有成本低、功耗低、性能强的特点,能够满足用户基本的 GUI 交互需求,其在小尺寸屏幕的应用场景中占据优势。
图4 ESP32-C3-LCDkit
图5 ESP32-C3-LCDkit实物图
参考链接:[乐鑫ESP32-C3-LCDkit](https://docs.espressif.com/projects/espressif-esp-dev-kits/zh_CN/latest/esp32c3/esp32-c3-lcdkit/user_guide.html)
#### MaixDuino 开发板
Maixduino开发板以M1Al模块作为核心单元,功能非常很强大,模块内置64位双核处理器芯片,拥有8M的片上SRAM,在Al机器视觉、听觉性能方便表现突出,内置多种硬件加速单元(KPU、FPU,FFT等),总算力最高可达1TOPS,可以方便地实现各类应用场景的机器视觉/听觉算法,也可以进行语音方向扫描和语音数据输出的前置处理工作。此外,开发板还配置了ESP32模块(WiFi+蓝牙一体),简单的操作即可轻松联网。
图6 MaixDuino 开发板
图7 MaixDuino 开发板实物图
## 系统方案及功能实现
本项目是以esp32s3为主控制器,esp32c3为遥控装置,k210作为yolov2算法安全帽识别部署硬件,通过两个TB6612控制四路n20电机以及二维云台构成通过两个MG90s构成,系统框图如下图所示,其中esp32s3负责电机控制,舵机控制以及接收esp32c3的信号,两个esp32信息的传输通过低延迟、低功耗的esp-now协议。k210是负责视觉部分,通过数据集标注、在maixhub中训练模型得到最后的模型。esp32c3是自带红外接收,然后接收红外发射器做出相应的指令然后控制esp32s3主控制器。
图8 系统框图
### 小车硬件设计
使用立创eda进行设计,设计需要关注一下esp32s3的尺寸,然后设置好间距,方便打板子后,焊接排座直接插入到排座,然后使用的78m05将7.2转5v,以及使用ams117转3.3v来给esp32s3供电,为什么留出电阻口,是方便测试,电机驱动使用的是得捷商城购买的tb6612。
图9 原理图
图10 PCB图
图11 渲染图
### 小车软件设计
小车的基本运动控制的话主要是提供四路pwm加上8个GPIO引脚控制正反转
例如控制pwm和限幅:
```
void Set_Pwm(int moto1, int moto2,int moto3,int moto4)
{
int Amplitude = 4000; //===PWM满幅是1024 限制在950
if (moto1 > 0)
{
digitalWrite(IN1_A, HIGH), digitalWrite(IN1_B, LOW); //TB6612的电平控制
}
else if(moto1 < 0)
{
digitalWrite(IN1_A, LOW), digitalWrite(IN1_B, HIGH); //TB6612的电平控制
}
else
{
digitalWrite(IN1_A, LOW), digitalWrite(IN1_B, LOW); //TB6612的电平控制
}
if (moto2 > 0)
{
digitalWrite(IN2_A, HIGH), digitalWrite(IN2_B, LOW); //TB6612的电平控制
}
else if(moto2 < 0)
{
digitalWrite(IN2_A, LOW), digitalWrite(IN2_B, HIGH); //TB6612的电平控制
}
else
{
digitalWrite(IN2_A, LOW), digitalWrite(IN2_B, LOW); //TB6612的电平控制
}
if (moto3 > 0)
{
digitalWrite(IN3_A, HIGH), digitalWrite(IN3_B, LOW); //TB6612的电平控制
}
else if(moto3 < 0)
{
digitalWrite(IN3_A, LOW), digitalWrite(IN3_B, HIGH); //TB6612的电平控制
}
else
{
digitalWrite(IN3_A, LOW), digitalWrite(IN3_B, LOW); //TB6612的电平控制
}
if (moto4 > 0)
{
digitalWrite(IN4_A, HIGH), digitalWrite(IN4_B, LOW); //TB6612的电平控制
}
else if(moto4 < 0)
{
digitalWrite(IN4_A, LOW), digitalWrite(IN4_B, HIGH); //TB6612的电平控制
}
else
{
digitalWrite(IN4_A, LOW), digitalWrite(IN4_B, LOW); //TB6612的电平控制
}
//功能:限制PWM赋值
if (moto1 < -Amplitude) moto1 = -Amplitude;
if (moto1 > Amplitude) moto1 = Amplitude;
if (moto2 < -Amplitude) moto2 = -Amplitude;
if (moto2 > Amplitude) moto2 = Amplitude;
if (moto3 < -Amplitude) moto3 = -Amplitude;
if (moto3 > Amplitude) moto3 = Amplitude;
if (moto4 < -Amplitude) moto4 = -Amplitude;
if (moto4 > Amplitude) moto4 = Amplitude;
//赋值给PWM寄存器
ledcWrite(pwm_Channel_1,abs(moto1));
ledcWrite(pwm_Channel_2,abs(moto2));
ledcWrite(pwm_Channel_3,abs(moto3));
ledcWrite(pwm_Channel_4,abs(moto4));
}
```
产生pwm:
```
void MOTOR_PWM_Init()
{
ledcSetup(pwm_Channel_1, freq, resolution); //PWM通道一开启设置
ledcAttachPin(PWM1, pwm_Channel_1); //PWM通道一和引脚PWMA关联
ledcWrite(pwm_Channel_1, 0); //PWM通道一占空比设置为零
ledcSetup(pwm_Channel_2, freq, resolution); //PWM通道二开启设置
ledcAttachPin(PWM2, pwm_Channel_2); //PWM通道二和引脚PWMB关联
ledcWrite(pwm_Channel_2, 0); //PWM通道二占空比设置为零
//
ledcSetup(pwm_Channel_3, freq, resolution); //PWM通道二开启设置
ledcAttachPin(PWM3, pwm_Channel_3); //PWM通道二和引脚PWMB关联
ledcWrite(pwm_Channel_3, 0); //PWM通道二占空比设置为零
ledcSetup(pwm_Channel_4, freq, resolution); //PWM通道二开启设置
ledcAttachPin(PWM4, pwm_Channel_4); //PWM通道二和引脚PWMB关联
ledcWrite(pwm_Channel_4, 0); //PWM通道二占空比设置为零
}
```
### 二维云台设计
软件使用的是solidworks,因为我是创维的3d打印机,所以使用的是创维的切片软件,在后面会提供stl文件。
材料清单:
```
铜柱
m2.5*10 3
m2.5*5 3
螺丝
m2.5*3 5
螺母
m2.5 5
两个舵机:mg90s(或者sg90)都行
```
图12 实物图
图13 实物图
图14 实物图
### 安全帽识别实现
在 MaixHub 创建一个检测训练项目,然后采集数据并标注(可以在线标注),创建一个训练任务,参数选择你有的硬件平台,如果没有开发板可以使用手机,选择 yolov2 进行训练即可,训练后会得到模型文件以及曲线情况。
图16 页面图
图17 曲线关系
图18 验证效果图
采集数据集可以用下面的代码,采集到的图像会保存到sd卡中,通过读卡器将图片导入maixhub在线标注即可:
```
import sensor, lcd
from Maix import GPIO
from fpioa_manager import fm
from board import board_info
import os, sys
import time
import image
#### image size ####
set_windowing = (224, 224)
#### sensor config ####
sensor.reset(freq=22000000, dual_buff=False)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA) # 320x240
try:
sensor.set_jb_quality(95) # for IDE display quality
except Exception:
pass # no IDE support
if set_windowing:
sensor.set_windowing(set_windowing)
# sensor.set_auto_gain(False)
# sensor.set_auto_whitebal(False, rgb_gain_db=(0x52,0x40,0x4d))
# sensor.set_saturation(0)
# sensor.set_brightness(4)
# sensor.set_contrast(0)
# sensor.set_hmirror(True) # image horizonal mirror
# sensor.set_vflip(True) # image vertical flip
# sensor.set_auto_whitebal(False)
sensor.skip_frames()
#### lcd config ####
lcd.init(type=1, freq=15000000)
lcd.rotation(2)
#### boot key ####
boot_pin = 16 # board_info.BOOT_KEY
fm.register(boot_pin, fm.fpioa.GPIOHS0)
key = GPIO(GPIO.GPIOHS0, GPIO.PULL_UP)
######################################################
#### main ####
def capture_main(key):
def draw_string(img, x, y, text, color, scale, bg=None , full_w = False):
if bg:
if full_w:
full_w = img.width()
else:
full_w = len(text)*8*scale+4
img.draw_rectangle(x-2,y-2, full_w, 16*scale, fill=True, color=bg)
img = img.draw_string(x, y, text, color=color,scale=scale)
return img
def del_all_images():
os.chdir("/sd")
images_dir = "cap_images"
if images_dir in os.listdir():
os.chdir(images_dir)
types = os.listdir()
for t in types:
os.chdir(t)
files = os.listdir()
for f in files:
os.remove(f)
os.chdir("..")
os.rmdir(t)
os.chdir("..")
os.rmdir(images_dir)
# del_all_images()
os.chdir("/sd")
dirs = os.listdir()
images_dir = "cap_images"
last_dir = 0
for d in dirs:
if d.startswith(images_dir):
if len(d) > 11:
n = int(d[11:])
if n > last_dir:
last_dir = n
images_dir = "{}_{}".format(images_dir, last_dir+1)
print("save to ", images_dir)
if images_dir in os.listdir():
img = image.Image()
img = draw_string(img, 2, 200, "please del cap_images dir", color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
sys.exit(1)
os.mkdir(images_dir)
last_cap_time = 0
last_btn_status = 1
save_dir = 0
save_count = 0
os.mkdir("{}/{}".format(images_dir, save_dir))
while(True):
img0 = sensor.snapshot()
if set_windowing:
img = image.Image()
img = img.draw_image(img0, (img.width() - set_windowing[0])//2, img.height() - set_windowing[1])
else:
img = img0.copy()
# img = img.resize(320, 240)
if key.value() == 0:
time.sleep_ms(30)
if key.value() == 0 and (last_btn_status == 1) and (time.ticks_ms() - last_cap_time > 500):
last_btn_status = 0
last_cap_time = time.ticks_ms()
else:
if time.ticks_ms() - last_cap_time > 5000:
img = draw_string(img, 2, 200, "release to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)
else:
img = draw_string(img, 2, 200, "release to capture", color=lcd.WHITE,scale=1, bg=lcd.RED)
if time.ticks_ms() - last_cap_time > 2000:
img = draw_string(img, 2, 160, "keep push to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)
else:
time.sleep_ms(30)
if key.value() == 1 and (last_btn_status == 0):
if time.ticks_ms() - last_cap_time > 5000:
img = draw_string(img, 2, 200, "change object type", color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
time.sleep_ms(1000)
save_dir += 1
save_count = 0
dir_name = "{}/{}".format(images_dir, save_dir)
os.mkdir(dir_name)
else:
draw_string(img, 2, 200, "capture image {}".format(save_count), color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
f_name = "{}/{}/{}.jpg".format(images_dir, save_dir, save_count)
img0.save(f_name, quality=95)
save_count += 1
last_btn_status = 1
img = draw_string(img, 2, 0, "will save to {}/{}/{}.jpg".format(images_dir, save_dir, save_count), color=lcd.WHITE,scale=1, bg=lcd.RED, full_w=True)
lcd.display(img)
del img
del img0
def main():
try:
capture_main(key)
except Exception as e:
print("error:", e)
import uio
s = uio.StringIO()
sys.print_exception(e, s)
s = s.getvalue()
img = image.Image()
img.draw_string(0, 0, s)
lcd.display(img)
main()
```
### 上传图片到onenet
上传图片到onenet可以通过http的方式进行上传到onenet。
图19 onenet方法图
例子如下:
```
url = "https://iot-api.heclouds.com/device/file-upload"
payload = {'device_name': '',
'product_id': ''}
files=[
('file',('logo1.jpg',open('tmp.jpg','rb'),'你的类型))
]
headers = {
'Authorization': ''
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
```
图20 上传效果图
## 项目源码
安全帽模型下载链接如下:https://download.eeworld.com.cn/detail/wuboy/630433
esp32红外接收端下载链接如下:https://download.eeworld.com.cn/detail/wuboy/630432
小车底板下载链接如下:https://download.eeworld.com.cn/detail/wuboy/630431
esp32控制端下载链接如下:https://download.eeworld.com.cn/detail/wuboy/630430
## 作品功能演示视频
视频链接:https://www.bilibili.com/video/BV1m64y1J7q9/?spm_id_from=333.999.0.0&vd_source=b1fff0f773136d7d05331087929c7739
视频:
[localvideo]2ae9fa67f898cf697b0540276fbec089[/localvideo]
## 项目总结
整个项目将得捷购买的材料全部使用上了,锻炼了自己换板子,以及调试能力,
最后实现了功能,本项目利用视觉检测人是否佩戴安全帽,如果未佩戴安全帽将记录下来,上传到onenet云平台,通过TCP协议图传到电脑实时图像,装置利用麦克拉姆轮便于移动,控制通过esp_now协议控制,低延迟控制。最后十分感谢得捷官方,得捷的工作人员。
帖子分享:https://bbs.eeworld.com.cn/thread-1266467-1-1.html
帖子分享:https://bbs.eeworld.com.cn/thread-1266054-1-1.html
## 其他
作品文档文件: