征集令 |3D打印机外设 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

专业版 征集令 |3D打印机外设

简介:打印机的环境有要求,比如说湿度、温度;以及对人体有害的气体含量等,在网络冲浪了好一会,但没有找到心仪的开源项目以及商业项目,所以自己制作了一款内置LVGL的环境面板,通过ESP_NOW通信。

开源协议: CC BY-NC-SA 3.0

(未经作者授权,禁止转载)

创建时间: 2023-03-16 00:20:42
更新时间: 2023-11-28 17:21:50
描述

立志做全套3D打印外围设备,目前是只制作监控主板和二次固化机,后续的项目、以及对应的程序,都会进行开源,欢迎同学分享好的想法。长期项目!

 

暂未完成二次固化机部分,但已完成设备交互。

 

小破站演示链接https://www.bilibili.com/video/BV1Fa4y1G76h/?vd_source=a1e9502e385d1bb03fa3ea7d653e93a3

前排提示:买淘宝的芯片,一定要三思而后行,假货不是一般的多!我买了3份MP3302,一共15片,结果没一片能用的!全烧了!只能通过以前买的显示模块来驱动!

目录:

1.前言

2.硬件设计

3.软件设计

4.未来规划

 

 

1.前言

首先感谢以下资料提供者,没有他们的分享与付出,很多项目都只有空想,没有实现,我相信在以后,我们的开源环境会越来越好,像我这样不是科班出身的也能玩,毕竟开源就是分享与学习嘛!

 

 

V1mrTJiBI2AmXgTfkEWu8lcjJBoy5ll6xU3usJsN.png

 

 

 

2.硬件设计

 

监控板:

主控采用ESP32 S3 ,本来是想采用芯片而非模块的方案,但是考虑到同学们的复现门槛,所以采用模块的方式,板载565RGB屏幕接口,恒流LED驱动屏幕背光(由于现有的LED恒流背光芯片买到假货,所以采用了模块的方式驱动RGB屏幕)无源蜂鸣器,SHT30温湿度监测,高达4M的串口下载速度。

 

 

二次固化机:

采用乐鑫的ESP32C2(即ESP8684)芯片,这个芯片的好处是:晶振频率要求较低,内部集成FLASH,外围电路要求低等。共设计了:一个电调输入接口,1个12V UV灯驱动接口、一个12V LED灯驱动接口、一个12V风扇接口,一个TVOC检测器。同时还有旋钮屏串口通信(待完成),使得旋钮的交互也可以反馈到二次固化机中。采用了DCDC降压设计, 12V先降压到5V给串口芯片供电,再通过LDO降压到3.3V给ESP32和其他芯片供电。

 

 

 

 

 

 

3.软件部分

 

1.监控板

使用ESP-IDF进行编程,使用LVGL作为图形UI,双缓冲,通过修改ESP-NOW例子,使其能够通过WIFI局域网/蓝牙通信,并且可进行各个外设的参数设置/观察,是本项目中的大脑担当。采用PlatformIO编程,通过PlatformIO的底层,即ESP-IDF5编程,自带各种驱动程序,方便编程。

监控板软件部分一共为5个部分。

1.Blynk

我采用的自建服务器的方法。使用主站的blynk也可以,但是控件会比较少,需要充钱才能获得一些固件的使用权,如果采用自建的方法,能使用到的控件和主站的差不多,能量还是无限的,可以随意使用控件。

接下来是安装Blynk-server的步骤

首先准备一个在你家局域网内的服务器(因为搭建比较容易),我使用的是ROCK5B,这是我家里的一个智能设备中控系统,安装了Ubuntu20.04。

(1)进入终端页面,一般是呈下图所示。

(2)拉取blynk-server搭建文件,这里我放在了gitee上。

在终端输入git clone https://gitee.com/lin_xiaoyan/blynk-local-server.git,显示如下内容

说明文件已经拉取到你的服务器里面了,用进入目录内,使用ls命令查看该目录下的内容,如果是显示这样就没问题了。

(3)初次运行

进入目录内,运行java -jar server-0.41.16-java8.jar -dataFolder /home/pi/Blynk -serverConfig /home/pi/someFolder/server.properties,会发现报错,没关系,按下列走就行。

要注意的是,第一个数据目录地址即/home/pi/Blynk 需要使用mkdir命令新建一个文件夹。我的就是在/home/rock/Blynk,这个不是定死的,你也可以在blynk-server新建一个这样的文件夹,然后用pwd命令查看所在目录位置,填入所在目录就好。

第二个目录地址是服务器的参数设置目录,需要在你设置的目录下新建一个server.properties文件,我用的是vim工具新建,在someFolder目录下,输入以下命令vim server.properties,然后输入:wq即可完成创建文件。

当新建目录、创建文件设置完成以后,再运行java -jar server-0.41.16-java8.jar -dataFolder /home/pi/Blynk -serverConfig /home/pi/someFolder/server.properties就会出现下列画面

那么恭喜你,你可以半场开香槟了。

打开https://10.0.8.14:9443/admin,10.0.8.14是内网的IP地址,填写你服务器所在的内网地址就可以看到如下界面,如果是想在外网使用,后续需要做内网穿透。

上面运行程序所得到的email 和password 就可以看到如下界面

我们的blynk是需要在后台运行的

执行crontab -e,这是linux的任务表,定时执行命令

选2 vim

在下列内容输入@reboot java -jar /home/pi/blynk-server.jar -dataFolder /home/pi/Blynk (这里的目录需要更改一下)

执行

sduo service cron reload

sudo service cron restart

就可以关闭页面了.

恭喜你!已完成blynk-server的搭建!

 

内网穿透我使用的是小米球,这里感谢刺球大佬!提供免费的服务器!

首先在下列教程中(https://blog.xiaomiqiu.com/article/121)注册好账号。

把小米球的客户端放进你的服务器目录内

我的服务器架构是arm64,所以我保存linux-arm的文件夹到我服务器目录内。

使用vim xiaomiqiu.conf,配置你的小米球服务器

一般显示这样,我把auth_token和server_addr隐藏了

auth_token可以在小米球控制台找到

server_addr可以在小米球服务器列表找到https://manager.xiaomiqiu.com/forum/question/questionDetail/39,如果使用免费一号,那就不用修改。

配置完成以后,执行./xiaomiqiu_start.sh,然后回车就行了。

后台运行的话,需要screen这个软件。ubuntu: sudo apt-get install screen ;centos: yum install screen

然后screen -S

会出现新的屏幕

接着执./xiaomiqiu_start.sh,回车,最后按ctrl+A+D就可以切换出页面了。

至此,blynk-server搭建完成。登录https://ngrok.xiaomiqiu123.top:分配的映射端口/admin就可以出现了以下界面,恭喜!

接下来进入手机服务端配置

点击下面那个红绿灯一样的东西,就会出现上述页面,点custom,输入ngrok.xiaomiqiu123.top,后面那一行是端口,填写映射端口就行。

 

接下来就会出现以下页面啦!不过你需要在手机端新建一个设备,之后在blynk网页端点击User->admin@blynk.cc

拉到下面会有以下信息

其中,Token我们要记下来。

 

接下来到设备端进行软件编写

aQyOuJ8ahf7q4Wzdu8xMBAnCpy7TLOGFLVoTX9Zs.png

可以看到,blynk有一个begin的函数,意味着是初始化,在前面的BLYNK_AUTH_TOKEN就是我们刚刚在网页端获得的一串字符。而IPAddress是你服务器的内网地址。

至此,blynk部分完成

 

2.ESP—NOW

ESP-NOW 是乐鑫定义的一种无线通信协议,能够在无路由器的情况下直接、快速、低功耗地控制智能设备。它能够与 Wi-Fi 和 Bluetooth LE 共存,支持乐鑫 ESP8266、ESP32、ESP32-S 和 ESP32-C 等多系列 SoC。ESP-NOW 广泛应用于智能家电、远程控制和传感器等领域。

 

ESP-NOW 是基于数据链路层的无线通信协议,它将五层 OSI 上层协议精简为一层,数据传输时无需依次经过网络层、传输层、会话层、表示层、应用层等复杂的层级,也无需层层增加包头和解包,大大缓解了网络拥挤时因为丢包而导致的卡顿和延迟,拥有更高的响应速度。

 

而ESP-NOW配置方便,初始化简单,只需要配置收、发回调函数,就可以进行通信

我们可以看到初始化这边

 

lLYfQYf6xBjVZ1iErVhhKueijzVZTnuVUac2ZH4N.png

首先是nvs_flash的初始化,这个是wifi库的要求,没有就会报错

第二个是esp_now的初始化,直接调用就行了,如果初始化错误,会报错

然后就是两个回调函数的注册,分别是OnDataSent1、OnDataRecv,他们分别代表的是OnDataSent1:执行发送函数esp_now_send后的回调函数(即运行后执行的程序)、OnDataRecv:每当接收到数据时执行的回调函数

可以看到我们接收回调函数,使用了memcpy,把incomingData的数据(即发送端发送的数据)通过函数memcpy拷贝到Data这个结构体

一般来说我们只要注册这个函数就行了,上述是回调函数的规范写法

然后我们再来看看Data这个结构体,实际上他是收发函数都调用的,这样子会有利于双向传输的数据规范性。

如果你打开发送端的代码,可以看到他们的ESP—NOW收发结构体是一样的,这就是我说的数据规范性,因为结构体上的数据每段必须一样,在内存中占用的顺序、大小也是一样的,这样的规范性有利于我们进行数据的调用和分辨。

而我在esp_now这个线程中不断进行发送命令,esp_err_t result1 = esp_now_send(broadcastAddress1, (uint8_t *) &Data, sizeof(Data));,接收到数据就调用接收回调函数,这样子就完成了两个设备之间的双向传输。

 

这是主控板的收发数据打印

 

3.RGB 接口7寸屏幕

这段是ESP-IDF的例程,采用PlatformIO有个好处,就是能调用ESP-IDF的例程,也能调用Arduino的库,因为他们的底层实际上是一样的,这个方法也适用于STM32,其底层是cubemx。

值得注意的是这几个参数的设置,得问屏幕厂家,否则会驱动失败。

 

4. LVGL

LVGL的初始化也没啥好说的,ESP-IDF例程,创建一个线程,调用刷屏函数就行。

我采用LVGL的开发工具是gui-guider。

这里我讲一下如何把gui-guider的代码移植到我们的设备上

首先在我们已经开发UI页面以后,生成C代码会看到下面的几个重要的文件

Btisy4KxB8PxVfgLInm4HYR3jeg1CpFNoLJygdyG.png

setup_scr开头的是你设置的页面,里面包含各种obj初始化函数,我们只需要把gui_guider.c,gui-guider.h,和setup-scr开头的文件拷贝到我们设备代码的目录内就行

可能有同学问了,event_init.c不需要吗?

其实这个是lvgl时间的初始化函数,但是有些控件gui-guider上面是没有这个事件的设置的,所以我event都是手搓,不用event_init里面的代码;

然后移植完成是这个效果

5.PWM生成

我采用的是ESP-IDF的例程,实际上Arduino更简单,只需要设置3步ledcAttachPin(uint8_t pin, uint8_t chan)、ledcSetup(uint8_t chan, uint32_t freq, uint8_t bit_num)即可完成初始化通过ledcWrite(uint8_t chan, uint32_t duty)就可以完成占空比的设置,但我还没研究如何分配定时器,所以我采用ESP-IDF的程序。

而ESP-IDF PWM例程上是这样的,他不是叫PWM,而是LEDC。

D1uZwm2UJ5aF2DzunA4MWPw5vw0J0y2fT8HYXiz0.png

首先是通道设置,配置PWM CHANNEL,分配引脚、输出极性、初始占空比和PWM速度模式

aVC6XLc5F0qaqdbsqRHNw4uhLTZ3oZvbJAqOsqz7.png

接下来是时基配置,要注意的是duty_resolution这一项,后面会说。

然后就是初始化时基、和输出通道。

到此,PWM初始化就完成了。

通过

ledc_set_duty(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty);

ledc_update_duty(ledc_mode_t speed_mode, ledc_channel_t channel);

这两个函数,我们可以修改占空比,但是依靠duty_resolution这一项来决定我们设定的数值。

比如我这里是 LEDC_TIMER_13_BIT,说明这个通道的分辨率是13bit,当占空比为100%时,duty = 2^(13)-1=8191

为什么叫分辨率,因为每改变一个占空比,能改变的duty增加了,所以每一个占空比的变化会变得更加细腻(这个可以在LED上看的出来)

当我们想要50%的占空比,那么就要设置成50/100* [2^(13)-1] = 4095 ,生成的PWM波如下图所示

 

ry6Oc6R7GuPXrgSsGFQlyd85IKpHXdHq4eZidR18.jpeg

 

6.电容触摸

用了陈亮老师的整合驱动,陈亮老师是一个玩屏的大佬,大名鼎鼎的GFX库就是他写的,B站也有号,大家可以关注一波~

lvgl注册触摸驱动是这样的

1PH4urZe90xYC36Zv9e5nI3eXue6jp8CTwNwwRZi.png

回调函数写完以后

初始化这么写就好了

rA9KUhMWb5K4QOq6UJoaqStLnjYl8e1CbqoVdINx.png

2.二次固化机

使用ESP-IDF进行编程,通过ESP-NOW,使其能够与监控板通信,并且能够通过blynk来给手机端,从而获得环境的参数、并且可在blynk上设置参数,主控板再发送给二次固化机,使得二次固化机的参数得到修改,同时向监控板发送信息,从而监控板上的数据也能得到实时更新。

ESP-NOW和PWM驱动与主控板相似,所以这里就不再赘述

接下来写的是有关于SHT30和TVOC传感器的驱动

 

1.SHT30温湿度传感器

老朋友了,又贵又不准

通过I2C驱动

首先是I2C的初始化路线

rUFuZFegJQEEKNnlIKGgEi0ymfrZaTgBCMlZmuEB.png

调用的时候返回初始化状态,返回ESP-OK是已经初始化完毕,值得注意的是这里已经有I2C的上拉,理论上可以不用再加上拉电阻

Q2uuOaIc7mXwqPSvw2kN4rH6qOsX1ZUlcANK8mlP.png

I2C的写入数据如上,因为我们的SHT30也是要初始化的,我们可以通过上述步骤,进行SHT30初始化的设置

在代码中可以这么写

RoBl1LQ2uIyfAxu6Xwjyzx1TXQAb1Iz0f3FgEovs.png

和ESP-IDF上的发送步骤一致

5hzlxYCtvaoOZhtYN7782vNvykTy1KNlO32qNKaB.png

读取数据时和写入数据时差不多,只是把写入函数换成读取函数

AXLzMxkrspwmqJNjUVd42OhOOO6MZD0G6W9GGVP6.png

最后进行校验就完成了

ImB2OuOurMFuEzduLNWJhugqHejENUwCQSmvaN5y.png

 

2.TVOC传感器

初始化是通过以下步骤

BcutzASOJW95hE872k2lpadoz6N18P8iKVjnHwES.png

可以看到,首先是uart设置,接下来就是初始化驱动、分配RAM空间、分陪引脚就OK了。

 

5zvBGDymJo5vqAJdRUhpvb4DKqKG9Ijf6xyPjgrF.png

由于ESP32没有接收中断,我们只能设置定时接收数据,而TVOC传感器是1秒发送一次数据,所以我们设置得比他小的接收周期就行

RcvTV9my0rBFcHRwgdLiMUSwutRPWmjrv4iSrTGt.png

根据手册,我们要找到接收数据字符里面的对应字符串的表头,这和指纹模块驱动类似,首先是接收数据到数组里面,然后通过strstr函数搜索表头以下字符串的地址指针,后面指向该地址,这时候的地址就是我们TVOC数据的地址了,

通过校验函数,得到的数据就是我们的TVOC数据字符串。

EzhTlp5vwQUg1eI4pz1GTi6bow1MqjLX4zyH8JP9.png

 

再通过手册上的算法,就可以得出我们的TVOC数据了。

9EqPDcjRJeUFp6pZg5oOnI5KKrDlkzjhpykVaLvQ.png

 

3.FDM环境采集(未来规划)

待上传

4.光固化清洗机(待整合)

 

4.未来规划

1.由于长达30天的实习,FDM监控清洗机这部分没有完成,在写完毕业论文以后,我在后续会补上这两个部分的内容。清洗机采用钕磁铁、电机的方式转动,看起来效果还行。

2.研究SPIFFS+LVGL的方式,存储数据,目前来说,数据没有存储功能,后续会加上。

3.3D打印外壳上线ing~

4.由于ESP32-S3的RGB驱动7寸屏已经是极限,后续会考虑用全志T113进行驱动

 

 

 

进度追踪.

3月16日,基本的UI图形即将完成,阿里云设备已接入

 

3月17日 已完成SmartConfig配网,无需手动在程序输入WIFI密码

3月19日 已完成LED无极调光、TVOC传感器功能

 

 

 

设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
序号 文件名称 下载次数
1

主控板外壳.zip

7
2

程序.zip

12
3

202305021227.mp4

5
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP