校园生活助手7-避坑指南-schoolassistant7

news/2024/10/30 11:22:08/

仅供参考

原版链接

贴上原文连接:https://www.bilibili.com/video/BV12g411b7A6/
贴上立创开源连接:https://oshwhub.com/lxu0423/xiao-yuan-sheng-huo-zhu-shou-7-0

(以及我的B站视频在这里,如果你认为这篇文章帮助到你的话,在视频里点赞会让我感到我做的事情意义更大了)

自用修改版链接

已经将硬件修改版本的内容移动到这里,包括原版一些bug和自己修改之后踩的坑,也包括修改之后的文件等等
这里是软件修改版本,这里所有的Bug、改进以及相关注释都在这里,而在这个帖子里面会逐步减少软件的更新,如果需要最新的功能,应该在这里面寻找而不是在这个帖子里面
以上两个链接的ReadMe可能都不会更新,因此注意看上传日志


第一次接触ESP32,如有错漏请指正
进度
在这里插入图片描述

开始前的准备

基本需求:
嵌入式系统
基础程序开发
一般焊接技能
300人民币左右的预算
特化需求:
ESP32开发
软硬件知识

部分零件价目表

ESP32-S3 —— 30
触摸屏幕 —— 50
芯片杂费 ——30
基本接口座——10
外设制造——40
外壳制造——20
能源供给——30

避坑指南正文

程序编译

基本需求:
VSC(VSCode)在这里插入图片描述

Espreiff-IDE(乐鑫开发包)在这里插入图片描述

乐鑫开发包避坑

建议使用在线下载包,因为它会尝试对你的系统环境进行改造,当然,使用离线下载包也是完全可行的
当进行安装的时候如果报错退出代码1检查以下操作
在这里插入图片描述
ESP32C6仅支持5.1以上的版本,如果版本不是5.1以上的会报错
因为下载速度很慢,因此建议勾选
在这里插入图片描述
如果软件频繁的报错网络有问题的话可以使用华为手机(目前似乎就只有华为支持这样做)使用USB进行连接,并在“个人热点”下找到“USB共享网络”选项
连接成功后,系统会提示
在这里插入图片描述
可以解决大部分断线问题
python使用清华源比较靠谱,也可以提速
在这里插入图片描述

Platformio(注意!不是CMake!在这里插入图片描述

修改文件

首先,尝试直接编译(不会成功)
在初次编译的时候程序会下载开发包——不必担心
‘’注意!这会花很长时间进行预配置(大约6小时左右)‘’
在第一次编译的时候程序会在编译到
![在这里插入图片描述](https://img-blog.csdnimg.cn/732f06dc19bf4580b1cfaa7f6ebd5473.png)
这一行的时候报错,这里的图片是已经修改之后的,可见其已经成功编译了

报错会给出在哪里报的错,根据提示知道是缺少文件
找到缺失的文件在目录下,分别是A_Config.h,Config_Local.h和ESPNowConfig.h其中ESPNowConfig,cofig_local原本文件名是有_example的,需要删掉
文件在:schoolassistant7-master\include
在这里插入图片描述
复制这两个文件到报错的文件目录下
目录是:schoolassistant7-master\src
复制粘贴后如下所示
在这里插入图片描述
然后根据作者的提示
在这里插入图片描述
改成这样
在这里插入图片描述
就是修改文件名
当然,如果依然报错可以尝试:
在这里插入图片描述在这里插入图片描述

之后再次尝试编译
点击在这里插入图片描述进行编译
需要花很长时间——中途修改文件可能会导致程序重新编译!
随后就是编译器成功的编译了程序
使用这种方法会出现类似于以下的警告,但它并不影响编译,对于是否会影响程序正常运作是未知的
在这里插入图片描述
等待一段时间后即可看见编译成功
在这里插入图片描述
1029秒约等于17.1分钟
请添加图片描述
烧录到上图所示就OK了

屏幕颜色出错(全新配色)

有些屏幕有可能会出现以下情况(如果一切正常不建议修改)
红蓝翻转,黑白对调
但是开机瞬间有白屏
如图
在这里插入图片描述
颜色翻转VS正常颜色
找到
在这里插入图片描述
找到第49-50行,修改为如下:

            cfg.invert = true;       // パネルの明暗が反転してしまう場合 trueに設定       如果亮度翻转则为true true   作者在Panel_Device.cpp里的注释是如果是IPS屏幕就得为真cfg.rgb_order = true;   // パネルの赤と青が入れ替わってしまう場合 trueに設定   蓝色和红色对调为真  默认为false

会有新配色)
在这里插入图片描述
如果需要原版配色,请进行如此更改

            cfg.invert = false;       // パネルの明暗が反転してしまう場合 trueに設定       如果亮度翻转则为true true   作者在Panel_Device.cpp里的注释是如果是IPS屏幕就得为真cfg.rgb_order = false;   // パネルの赤と青が入れ替わってしまう場合 trueに設定   蓝色和红色对调为真  默认为false

结构体参数的详细定义在:
在这里插入图片描述
焊接时钟之后无法启动
不焊接一样可以正常启动,这个是应该是没有硬件锁的
但是,注意!!!
在这里插入图片描述
引脚不一样的!
虽然程序有考虑到兼容PCF8563
在这里插入图片描述
硬件接口不一样
因此你可以尝试通过以下方法改造
在这里插入图片描述
注意一下,PCF8563需要外部32.768khz晶振以及晶振起振电路

CP2104没有或者损坏
那就只能赌一把了
因为TinyUSB固件会占用自带的CH343下载接口也就是说,只有一次机会。

中文输入法(未解决)

如果打不出来一些汉字,可以在这里添加:
在这里插入图片描述
适用于打不出自己名字的情况
但是依然还是打不出来的
还需要对字库进行编辑(以后补上
找到了一些可能有用的解决方案,不过还没尝试
方案1
方案2

文件系统


特别注意:买大厂的卡,不然会装载失败还不知道哪里有问题!


小米手环连接

注意:小米手环得要是4才行,如果不是小米手环4会提示你更新软件,就算连上了手环也会拒收
因为没找到第一作者的版权文件,因此也找不到更换为小米手环6的方法
获取密钥教程详见:这里
获取小米手环的密钥之后需要修改引导文件
在这里插入图片描述
连接地址直接填入就可以了
但是密钥是16进制编码(有时候也叫作二进制编码)
填入密钥操作如下
0;先剔除获取的密钥中的“0x”头
1;将密钥编码拆分为每两个字符的形式
2;依次替换原版的123456……
3;在每一位前面添加“0x”(不然编译器会报错)
蓝牙地址直接填入就可以了

GIF替换

在这里插入图片描述
这是修改显示角度,但是不会修改操作角度
如果要修改gif
第一步,获取gif
在这里插入图片描述
使用该软件快捷的制作gif文件(别的也ok)
注意尺寸应该在128x128左右
制作并导出gif文件
请添加图片描述
比如这个
然后使用gif转二进制网站,配置如下
在这里插入图片描述
注意红框内容
上传之后修改为想要替换的文件名
在这里插入图片描述
点击转换,网站会自动生成.c文件,替换就行了
替换之前记得备份)
在这里插入图片描述
比如这个文件对应着扫描wifi的时候加载的动图

天气地址修改

原版的天气定位是北京的
在这里插入图片描述
可以在这里获取你所在地区的地址
在这里插入图片描述

在这里进行设置
参见
在这里插入图片描述

原版程序优化

电压显示

在这里插入图片描述
原版当中如果不连接依然会显示电流的数值,目前已经被修复

点击关于本机无显示

在这里插入图片描述
这个的作用是插入一个全屏弹窗,标题是制作信息,原工程等位于左下方,如果回车行太多下面的不会显示。

库仑计修复&更准确的电量显示

原版本存在以下问题:
库仑计复位到0,导致原本的功能也无法使用,除非将电池电池放电到0再进行复位
因此修改如下:
在这里插入图片描述
因此需要在充满电之后才能复位库仑计
(否则会显示负数)
原版的电量显示并不准确,因为它是基于电压比较产生的大概值
因为锂离子电池存在一个放电平台期
在这个期间电池的放电对电压影响不大
因此可能会发现电池在一开始用的很快,然后中间的时候可以用很久,快没电的时候掉电掉的特别快
这里是将库仑计应用于电池电压比较
1300是我电池的电压,按照实际进行修改
在这里插入图片描述
在这里插入图片描述

UI优化

在这里插入图片描述
缩小了栏的尺寸之后整个的操作手感会更好,原版的排版相当糟糕……

高考倒计时-点击显示

在这里插入图片描述
点击这里查看高考倒计时
在这里插入图片描述

在如图所示的位置插入以下代码

int8_t years;
int8_t month;               //不能是unsigned类型
int16_t days;               
const char *dTS;static void event_obj_clocks_press(lv_event_t *e)
{years = hal.rtc.year;month = hal.rtc.month;      //获取时间days = hal.rtc.day;//高考时间6月8日years = 24 - years;                           //24高考,如果今年高考就设定为23或者屏蔽这一行if(years <= 0 ){years = 0;}month = month -6;                             //相差月份if (month <= 0){month = month * -1;                         //如果在6月前则取反}days = 30- days +8;                            //大月的时候会出错if (days <= 0){days = days * -1;}days = years* 360 + month*30 + days;             //按照30天计算dTS = std::to_string(days).c_str();lv_obj_fade_out(lblTime, 300, 100);lv_label_set_text(lblTime, dTS);                 //最多能显示三位数lv_obj_fade_in(lblTime, 300, 100);               //移除了也要移回来,不然会不显示
}
static void event_obj_clocks_press_lost(lv_event_t *e)
{lv_obj_fade_out(lblTime, 300, 100);               //更柔滑的转换lv_label_set_text(lblTime, "等待开始");         lv_obj_fade_in(lblTime, 300, 100);
}

第二步
在这里插入图片描述
第三步
在这里插入图片描述
因为赶时间,因此这个高考倒计时并不准的,仅供参考
以后可能会优化逻辑(大概是大小月检测+2月以及闰年补差)

新添功能:应用-计算器

源代码(直接复制粘贴进去即可)

20230416版本V1

#include "A_Config.h"
class AppCalculator : public AppBase
{
private:bool Calculator = false;/* data */
public:AppCalculator(){name = "calculator";title = "计算器";description = "可以进行四则运算";image = "\xEF\x84\x9C" ;//LV_SYMBOL_PASTE; 需要对其进行显示的是16进制编码}void setup();void loop();void destruct();
};
//20230406开发   当前版本V1
///*
/*
lv_obj_t *btn_add;
lv_obj_t *btn_reduce;
lv_obj_t *btn_ride;//乘
lv_obj_t *btn_remove;//除
//应该有个退位按钮
lv_obj_t *btn_d0;   //注意0不能放在首位
lv_obj_t *btn_d1;
lv_obj_t *btn_d2;
lv_obj_t *btn_d3;
lv_obj_t *btn_d4;
lv_obj_t *btn_d5;
lv_obj_t *btn_d6;
lv_obj_t *btn_d7;
lv_obj_t *btn_d8;
lv_obj_t *btn_d9;
*/
float NUM1 = 0.00;    
float NUM2 = 0.00;
float NUM3 = 0.00;//输出  在运行阶乘的时候很容易爆掉   应该加一个限制      
unsigned int  mode = 0;                
/*
码表:
0---输出结果1---加
2---减
3---乘
4---除
以后添加的功能
5---次方模式
6---统计模式(A33 C43那种)
*/
bool addPS;
bool revPS;
bool mixPS;
bool wptPS;
bool factorialPS;
bool facwfacPS;bool PS1;
bool PS2;
bool PS3;
bool PS4;
bool PS5;
bool PS6;
bool PS7;
bool PS8;
bool PS9;
bool PS0;bool RSG;//开始运算标志char * RUNDAT;
/*
static void btn_add_press(lv_event_t *e)        //回调函数
{lv_toast("+");mode = 1;// msgbox("测试","+号输入");
}
static void btn_reduce_press(lv_event_t *e)
{lv_toast("-");mode = 2;
}
static void btn_ride_press(lv_event_t *e)
{lv_toast("*");mode = 3;
}
*/
//*/
static lv_obj_t * ARCES;
static lv_obj_t * NUNSHOW;
void AppCalculator::setup()
{LOCKLV();//必须要有LOCKLV和UNLOCKLV,否则在应用列表里面无法显示应用图标//也就是说,例程实际上是不能被直接应用的button(scr, "加", 10, 60, &addPS);button(scr, "减", 60, 60, &revPS);button(scr, "乘", 110, 60, &mixPS);button(scr, "除", 160, 60, &wptPS);//这里的坐标系和之前的不大一样,以屏幕左上角作为原点//    button(scr, "A", 210, 60, &factorialPS);//阶乘模式
//    button(scr, "C", 260, 60, &facwfacPS);//阶乘/阶乘 即为Cxy  还没做好,先Ban掉///*button(scr, "1", 10, 120, &PS1);button(scr, "2", 60, 120, &PS2);button(scr, "3", 110, 120, &PS3);button(scr, "4", 160, 120, &PS4);button(scr, "5", 210, 120, &PS5);button(scr, "6", 260, 120, &PS6);button(scr, "7", 10, 180, &PS7);button(scr, "8", 60, 180, &PS8);button(scr, "9", 110, 180, &PS9);button(scr, "0", 160, 180, &PS0);button(scr, "=", 160, 180, &RSG);//*///  lv_obj_center(button(scr, "添加计算", 0, 0, &Calculator));
/*btn_add = lv_btn_create(scr);lv_obj_set_size(btn_add, 50, 25);lv_obj_align(btn_add, LV_ALIGN_CENTER, -125, 0); //x轴正方向 》》   y轴正方向 ↓ ↓ 数字是像素点lv_obj_add_event_cb(btn_add, btn_add_press, LV_EVENT_RELEASED, NULL);//设置触发模式是松开之后lv_obj_t* label1 = lv_label_create(btn_add); // 创建一个子项和按钮关联lv_label_set_text(label1, "+");              // 设置显示内容lv_obj_center(label1); btn_reduce = lv_btn_create(scr);lv_obj_set_size(btn_reduce, 50, 25);lv_obj_align(btn_reduce, LV_ALIGN_CENTER, -65, 0); //每次+60lv_obj_add_event_cb(btn_reduce, btn_reduce_press, LV_EVENT_RELEASED, NULL);lv_obj_t* label2 = lv_label_create(btn_reduce); lv_label_set_text(label2, "-");              lv_obj_center(label2);   btn_ride = lv_btn_create(scr);lv_obj_set_size(btn_ride, 50, 25);lv_obj_align(btn_ride, LV_ALIGN_CENTER, -5, 0); lv_obj_add_event_cb(btn_ride, btn_ride_press, LV_EVENT_RELEASED, NULL);lv_obj_t* label3 = lv_label_create(btn_ride); lv_label_set_text(label3, "*");              lv_obj_center(label3);     //调用太复杂,就删掉了*/UNLOCKLV();//msgbox()
}
/*
String IPT;
char* MEM;
char* FY,NY,FCP,NCP;
const char *d = " *";
*/
void AppCalculator::loop()
{AppBase::loop();char OPnum[40];//lv_obj_t *label = lv_label_create(lv_scr_act());//lv_scr_act() //创建一个子,但是会卡死//lv_label_set_text_fmt(label, "%.3f", 1213.135);  // 需要修改设置否则只会显示“f“ 在lv_conf.h的262行//lv_obj_align(label, LV_ALIGN_CENTER, 60, -60);//sprintf(OPnum, "%.3f", NUM1);//转换函数//lv_label_set_text(label,OPnum);if (addPS){lv_toast("加");addPS = 0;mode = 1; }if (revPS){lv_toast("减");revPS = 0;mode = 2; } if (mixPS){lv_toast("乘");mixPS = 0;mode = 3; }   if (wptPS){lv_toast("除");wptPS = 0;mode = 4; }if (factorialPS){lv_toast("阶乘模式:Axy");factorialPS = 0;mode = 5; }if (facwfacPS){lv_toast("组合数模式:Cxy");facwfacPS = 0;mode = 5; }//数字输入if (PS1){if(mode ==0){NUM1 = NUM1 *10 +1;sprintf(OPnum, "%.0f", NUM1);//转换函数lv_toast(OPnum);//lv_obj_fade_out(label,300,100);//lv_label_set_text_fmt(label, "%.0f", NUM1);//lv_obj_fade_in(label,300,100);}else{NUM2 = NUM2 *10 +1;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS1 = 0;}if (PS2){if(mode ==0){NUM1 = NUM1 *10 +2;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +2;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS2 = 0;}if (PS3){if(mode ==0){NUM1 = NUM1 *10 +3;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +3;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS3 = 0;}if (PS4){if(mode ==0){NUM1 = NUM1 *10 +4;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +4;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS4 = 0;}if (PS5){if(mode ==0){NUM1 = NUM1 *10 +5;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +5;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS5 = 0;}if (PS6){if(mode ==0){NUM1 = NUM1 *10 +6;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +6;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS6 = 0;}if (PS7){if(mode ==0){NUM1 = NUM1 *10 +7;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +7;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS7 = 0;}if (PS8){if(mode ==0){NUM1 = NUM1 *10 +8;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +8;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS8 = 0;}if (PS9){if(mode ==0){NUM1 = NUM1 *10 +9;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10 +9;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS9 = 0;}if (PS0){if(mode ==0){NUM1 = NUM1 *10;sprintf(OPnum, "%.0f", NUM1);lv_toast(OPnum);}else{NUM2 = NUM2 *10;sprintf(OPnum, "%.0f", NUM2);lv_toast(OPnum);}PS0 = 0;}if (RSG){if(mode == 1){NUM3 = NUM1 +NUM2;sprintf(OPnum, "%.0f + %.0f = %.0f", NUM1,NUM2,NUM3);}if(mode == 2){NUM3 = NUM1 -NUM2;sprintf(OPnum, "%.0f - %.0f = %.0f", NUM1,NUM2,NUM3);}if(mode == 3){NUM3 = NUM1 *NUM2;sprintf(OPnum, "%.0f * %.0f = %.0f", NUM1,NUM2,NUM3);}if(mode == 4){NUM3 = NUM1 /NUM2;sprintf(OPnum, "%.0f / %.0f = %.3f", NUM1,NUM2,NUM3);//只有除法运算才有可能考虑,因为没有小数点输入}if(mode == 5){if(NUM1<=NUM2){/*if(NUM1 == 0){NUM3 = 1.00;}//一些防呆逻辑似乎并不需要……*/for(NUM1;NUM1--;NUM1==2){NUM2 = NUM2* (NUM2 - 1);}sprintf(OPnum, "阶乘运算结果 %.0f", NUM2);}else{sprintf(OPnum, "列式错误!");}}if(mode == 6){if(NUM1<=NUM2){float NUM4 = 0.00;//分母float NUM5 = 0.00;//临时寄存NUM1的数据float NUM6 = 0.00;//临时寄存NUM2的数据NUM5 = NUM1;NUM4 = NUM2;NUM6 = NUM2;for(NUM6;NUM6--;NUM6==2){NUM4 = NUM4* (NUM4 - 1);}NUM1 = NUM5;for(NUM1;NUM1--;NUM1==2){NUM2 = NUM2* (NUM2 - 1);}NUM3 = NUM2 / NUM4;sprintf(OPnum, "组合运算结果 %.3f", NUM3);}else{sprintf(OPnum, "列式错误!");}}lv_toast(OPnum);NUM1 = 0.00;//或许可以保留NUM1作为下次输入的头,不过先实现功能再说NUM2 = 0.00;NUM3 = 0.00;mode = 0;RSG = 0;}/*if (Calculator){IPT = msgbox_string("请输入算式",true,false,false);MEM = new char[strlen(IPT.c_str())+1];FY = strtok(MEM,d);while(FY){msgbox("计算结果",FY);FY=strtok(NULL,d);//一直有问题,因此不得不抛弃这个方案}}*/
}void AppCalculator::destruct()
{hal.DoNotSleep = false;
}static  AppCalculator app;

就可以有一个计算器了
目前还没解决的问题是:
1:大的数字显示
2;比较高级的逻辑运算
3;小数点自定义
以上问题全部解决
添加了高中生常用的运算,预计可以覆盖高中90%的运算
比如用来计算的概率的阶乘,计算体积的乘方等等
详情建更新,这里的是超级远古版
在这里插入图片描述

应用创建教程
创建一个应用需要几步?
第一步 使能程序

因为CSDN吞图片,因此我不会更新了
IIS音响制作教程

打印机制造

程序修改

//在这里进行修改就可以测试了while(1){//	sendDebugPrint();				//模拟测试,取消注释即为启用测试模式

目前在做补充注释工作,原版的注释比较少,不方便修改

软件预备

这是一款基于STC开发的8051单片机
因此需要
在这里插入图片描述
在这里插入图片描述
两者兼备之后打开工程
删掉.uvopt文件
否则会导致UV4程序卡死,无法编辑
添加头文件到UV4否则无法编译
但其实如果不改程序的话也可以不经过编译直接烧录,这就不需要UV4,只需要一个STCISP就可以了(你需要购买下载器)
单片机烧录需要冷启动(在指示灯亮,程序处于烧录状态之后开关复位,指示灯灭,等待约0.5秒左右重新打开开关,指示灯亮,单片机开始烧录程序)
在这里插入图片描述
OK!

摄像制造(暂未解决——ESP32CAM烧录)

需要安装
在这里插入图片描述
第二步,安装esp32包
在首先项将源更改如下

https://dl.espressif.com/dl/package_esp32_index.json
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

挂了
在这里插入图片描述
再多试几次就差不多了
如何获得更稳定的连接参考开头的“乐鑫开发包避坑”

固件获取

使用ESP-CAM进行制作,打印机电路去掉升压模块就可以塞进下载器的缝隙里了
在这里插入图片描述
找不到文件就复制一份过去,一开始以为是占用,但是后来发现压根没有这个软件
在这里插入图片描述
开发板选择AI Thinker ESP32-CAM

软件开发(暂未解决——Java语言)

手机软件使用
在这里插入图片描述
开发

电脑端软件使用
在这里插入图片描述
开发(使用其他软件也是可以的,甚至于使用txt编辑也是可行的)


避坑指南(欢迎补充)

硬件

AXP192根本买不到,卖家和我说没货了 有群友买到正版和盗版的了
CH340E似乎无法正确的引导ESP32进入下载模式,还会导致蓝屏! 不用就是了
USB的焊盘一定要焊好,我就这样报废了一块板和一个ESP32-S3! 记得加焊锡
插头不是XH,是PH,立创EDA的BOM是不准的
电容别把nf买成pf的 不使用原版的电路
电感得要是功率电感
FPC插座得要用翻盖的,抽屉的有一些用不了
打印机头接口用的是JX-2R-01
打印机似乎功率太大以至于连程序也可能因为断电而无法正常运行——难道是因为使用SC66K替换下来了体积较大的AMS1117-33作为步进电机电源?

软件

使用的是VSCode的插件,不是默认的配置,我调了好久才意识到这一点,并且使用默认的编译器(CMake)会编译不了
不使用ARDUINO IDE进行编译
下载安装包别选离线安装包,要选在线安装包,在线安装包会检测你的环境并进行一些配置
使用platform io进行的开发
一定要给VSC给够位置
原版的程序是默认检测AXP192,如果没有,则会进入一个死循环! 详细参见内容关于程序修改部分

复刻难度

高密度焊盘:☆☆
双面元件焊接:☆☆
软件开发:☆☆☆(组织度:☆-环境:☆-多语言:☆)
外壳重设计:☆外壳文件一些3D软件无法编辑)
资料缺乏:☆☆(datasheet得自己寻找对校)
缺乏技术支持:☆☆☆☆开学之后就没回复了)
相对等级:☆☆☆
多配件:☆
价格高昂:☆☆


http://www.ppmy.cn/news/274075.html

相关文章

智能语音生活助手实现(QT)

智能语音生活助手实现&#xff08;QT&#xff09; 一、功能介绍二、实现步骤2.1 语音识别模块2.1.1 录音2.1.2 点击释放按钮槽函数2.1.3 申请百度AI开发平台语音识别应用2.1.4 HTTP请求类实现2.1.5 发送请求2.1.6 MainWindow类调用函数2.1.7 语音控制设备联动 2.2 智慧生活模块…

Java字节码编程:从入门到精通

前言 Java是一种高级语言&#xff0c;其代码在编译后被转换为Java字节码文件。Java字节码文件包含了Java平台上的指令集&#xff0c;这些指令可以在Java虚拟机&#xff08;JVM&#xff09;上执行。因此&#xff0c;通过编写和操作字节码&#xff0c;我们可以在运行时动态地修改…

编程谜题:提升你解决问题的训练场

摘要&#xff1a;有趣的编程谜题可以练习你解决问题的能力&#xff0c;快来挑战吧~~ 本文分享自华为云社区《代码的出现&#xff1a;用 Python 解决你的难题》&#xff0c;作者&#xff1a; Yuchuan 。 代码谜题的出现旨在让任何对解决问题感兴趣的人都能上手。您不需要具有深…

在myeclipse中部署jwebmail

1.部署tomcat 2.下载jwebmail源码&#xff08;jwebmail-1.0.1rc1-src.zip&#xff09;及jwebmail.war(在jwebmail-1.0.1rc1.zip中) 3.首先把jwebmail.war放在tomcat安装目录下的webapps里&#xff0c;然后在myeclipse中启动刚才部署的tomcat&#xff0c;不是myeclipse tomcat,这…

2018最后一战:25天编程PK赛!

作者 | Jane 出品 | AI科技大本营 2018 年余额已不足一个月&#xff01;是惊喜还是惊恐&#xff1f;这一年是充实有意义的一年&#xff0c;还是觉得略有失望&#xff1f;最后这三十天&#xff0c;我们还能学些什么&#xff1f;获得哪些成长&#xff1f;如何为 2019 年准备一个好…

日历 节假日计算_假日季节的7种科技降临日历

日历 节假日计算 假期即将到来&#xff0c;我们将其节日混乱的特殊品牌带入了我们的许多生活。 尽管一年中的这个时间可能有点忙&#xff0c;但许多技术人员仍然可以通过参加技术出现日历来磨练自己的技能。 那些在基督教传统中长大的人可能已经熟悉了降临日历的概念&#xff…

【Rust日报】 2019-02-05

本文转载自&#xff1a;https://rust.cc/article?id70499a9b-ce09-457a-a653-83e924a7e39d Rust日报祝大家新的一年诸事六六六 浏览器插件&#xff1a;用于自动定向Rust Book的过期链接 #trpl #rustbook 真是有心人 trpl-redirect 「Blog OS系列文章中文翻译」使用Rust创造操作…

前端技术搭建拼图小游戏(内含源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了俄罗斯方块游戏&#xff0c;今天还是继续按照我们原定的节奏来带领大家完成一个拼图游戏&#xff0c;功能也比较简单简单&#xff…