arduino代码_纯纯小白开发arduino--我的调试经验

8735416576c5f96b9de086024d1a7c6b.png

arduino 是什么我就不做介绍了。这里的小白并不是说我没有嵌入式开发经验而是说从来没有实际开发过arduino。虽然它在世界范围内都很流行,可是不知为何国内专业做嵌入式开发的人对它大多都嗤之以鼻。

我对arduino的想法是:”不管黑猫白猫,抓到老鼠就是好猫!“。只要能够完成功能就可以。

言归正传:

在网上买了一块ttgo生产的 ESP32墨水屏开发板 。从github下载资料,发现它们提供的源码是arduino的,没有c语言版本的。而我又比较着急的看效果所以就硬着头皮开始编写arduino的代码了。

https://github.com/zhengzixin/T5-Ink-Screen-Series

下面是我的调试过程,希望对那些刚刚接触arduino的人有所帮助。

  1. 语法

在网查看了基本语法,最主要的就是两点:配置在setup(),主循环在loop()函数中,支持回调函数。类似单片机的main函数。

2. arduino IDE

语法看完之后就是下载IDE,在arduino官网下载了IDE,按照教程的提示将代码中库复制到arduinoIDE的库目录中,可是总提示我库不能用

662637516f992b83d5214aa9442246e0.png

虽然没用过,但是分析应该是名字的问题,于是修改了文件名,成功解决了这个问题。

教程又让我下载esp32fs软件,之前不明其意,觉得是和webserver相关的,也又没有管,这也为之后留下了隐患。

a4017127878327e9530fbfc9a430d11e.png

用arduino编译器打开工程,发现不能编译,不知道到为什么,后来发现教程上说还支持platformIO开发,于是果断放弃使用arduino编译器。

platformIO 是VScode中的一个插件,支持很多种开发板。

3.编译&调试

使用platformIO编辑就简单多了,打开源码,在ini文件中修改串口,直接编译就可以了。可是又出现问题了。

(1) 错误1

在程序执行的时候发现报错:

”Please use Arduino ESP32 Sketch data Upload files“,

这突然让我想到了没有按照教程执行安装“esp32fs”软件这一步,果断回头安装,虽然到目前为止也不知道这个软件是干什么的。

47e0743f0d0624749f4105bfa2522744.png

点击ESP32 SKetch ,发现报错,avr 不支持spiffs,猜测应该是因为编译器不认识esp32开发板,就在某度上搜索安装方法。

d1150c1f6cae94c774b997acc7eef8bd.png

安装成功后发现,发现在arduino编译器上可以选择esp32开发板了

1312fb245aa2e7f9a682a45d93e40b84.png

点击esp sketch data upload ,也能成功执行了,之前代码编译不过去的问题也解决了。

(2)错误2

回到platformIO中,继续调试程序,发现虽然代码是成功执行了但是并没有如期的显示教程中的效果没有显示出图片来,还是有问题。

只能回头分析代码,

72f8bb4e70d1f036d2b7f9c04e489ca6.png

从代码中分析可以知道,应该是调用了某一个文件系统中的open函数打开filename文件。此时filename = "/avatar.bmp"。

文件系统肯定是需要存储介质的,而此时开发板上并没有SD卡,所以分析这个文件系统应该使用esp32 内部的spiflash,看到这里突然意识到“esp sketch”是干什么的了。这个工具的作用应该就是将数据烧录到spiflash中。

想到这里回头查看espfs的说明

https://github.com/me-no-dev/arduino-esp32fs-plugin​github.com

在第一句就写了它的作用了,而我还绕了一大圈子才想到,真是为我的智商捉急啊。

44d9b03f465f60a4d340a46151768b95.png

按照usage,将所要显示的图片复制到esp32工程中的data文件夹下,执行esp sketch data upload ,成功烧录。

回到platformIO中,重新烧录程序,查看现象。

成功!!!

f2ca3b7a43a119f4fd269edf127527e1.png

总结:

arduino确实非常简单,你所能想到的大部分功能在网上都能查到,而它的语法又特别简单,特别容易上手,对于那些不需要特别优化性能和实现特别复杂的功能的产品来说已经足够了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重要的ui组件——Behavior

v7包下的组件类似CoordinatorLayout推出也有一段时间了,大家使用的时候应该会体会到其中很多的便利,今天这篇文章带大家来了解一个比较重要的ui组件——Behavior。从字面意思上就可以看出它的作用,就是用来规定某些组件的行为的,那…

《转》CXF WebService 开发文档-目录索引

CXF WebService 开发文档-目录索引 上次介绍了Axis的WebService,现在我们来看看CXF是怎么完成WebService的。 Axis1 WebService 在线博文: http://www.cnblogs.com/hoojo/archive/2010/12/20/1911349.html Axis2 WebService 在线博文: http:/…

Spark的基本架构

http://ihoge.cn/2018/IntroductionToSpark.html Spark的基本架构 当单机没有足够的能力和资源来执行大量信息的计算(或者低延迟计算),这时就需要一个集群或一组机器将许多机器的资源集中在一起,使我们可以使用全部累积的在一起…

深入 char * ,char ** ,char a[ ] ,char *a[]

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程 1 数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。 2 指针。 指针也是一种变量,只不过它的内存单元中保…

备份恢复与同步(数据搬运专家)

NewLife.XCode是一个有20年历史的开源数据中间件,支持net6/net5/net45/net40,由新生命团队(2002~2020)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中&#…

简析TCP的三次握手与四次分手

TCP是什么? 具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础&am…

for循环延时_前端中的事件循环eventloop机制

我们知道 js 是单线程执行的,那么异步的代码 js 是怎么处理的呢?例如下面的代码是如何进行输出的:console.log(1);setTimeout(function() { console.log(2);}, 0);new Promise(function(resolve) { console.log(3); resolve(Date.no…

由于未分配内存的指针导致段错误

代码如下 #include<iostream> using namespace std;void f(char **s) {*s "chenyu"; }typedef struct _node {int val;struct _node *next; } Node;typedef struct _link {Node *front;Node *rear; } Link;void queue(Link *link) { // link.front link.rear…

androidActivity生命周期

Activity生命周期Activity是一个用来提供用户交互界面的组件&#xff0c;它是四大组件之一&#xff0c;对于我们刚刚学习android的菜鸟来说是非常重要的&#xff0c;我们可以将一个屏幕理解为一个Activity&#xff0c;Activity通常是一个全屏的界面&#xff0c;每一个应用程序可…

Autofac实现有条件的DI

Autofac.Annotation框架是我用.netcore写的一个DI框架&#xff0c;基于Autofac参考 Spring注解方式所有容器的注册和装配,切面,拦截器等都是依赖标签来完成。开源地址&#xff1a;https://github.com/yuzd/Autofac.Annotation本期讲的是最新实现的功能有条件的DI有些时候我们想…

Spark ML - 协同过滤

http://ihoge.cn/2018/ML1.html 协同过滤算法 ​ 获取spark自带的MovieLens数据集&#xff0c;其中每行包含一个用户、一个电影、一个该用户对该电影的评分以及时间戳。我们使用默认的ALS.train() 方法&#xff0c;即显性反馈&#xff08;默认implicitPrefs 为false&#xff…

转:java的各个拓展类库的推荐方案

from: 链接&#xff1a;https://www.zhihu.com/question/21142149/answer/109854408 Java是世界上最强大的编程语言之一&#xff0c;很多开发人员和大型企业都偏爱Java&#xff0c;并且在各种应用场景中使用它。在本文中&#xff0c;我们为大家介绍几种Java库来帮助开发人员解决…

字符串常量到底存放在哪个存储区

字符串常量&#xff0c;放在哪个存储区呢&#xff1f;是“自动存储区”还是“静态存储区”中&#xff1f; 比如&#xff1a; char *pstr"hello world!"; 这里&#xff0c;"hello world!"是一个字符串常量&#xff0c; pstr是在栈中的变量。 我想问&#…

公众平台关注用户达到5万即可开通流量主功能 可以推广APP应用

今天微信公众平台发布发布了一些更新&#xff0c;公众帐号的关注用户达到5万&#xff0c;即可开通流量主功能&#xff0c;之前的是要求10万粉丝&#xff0c;这是一个微信开放的信号。广告主可推广苹果商店应用或腾讯开放平台应用。新增卡片和图文广告规格。以下是微信团队的公告…

二进制全排列 java_排列组合算法真厉害,傻瓜都能学会

作者&#xff1a;枕边书来源&#xff1a;https://zhenbianshu.github.io/2019/01/charming_alg_permutation_and_combination.html需求最近工作中碰到一个需求&#xff1a;我们的数据表有多个维度&#xff0c;任意多个维度组合后进行 group by 可能会产生一些”奇妙”的反应&am…

linux运维常用命令

1.删除0字节文件find -type f -size 0 -exec rm -rf {} \;2.查看进程按内存从大到小排列ps -e -o "%C : %p : %z : %a"|sort -k5 -nr3.按cpu利用率从大到小排列ps -e -o "%C : %p : %z : %a"|sort -nr4.打印说cache里的URLgrep -r -a jpg /dat…

如何计算 string 的 crc32 值 ?

咨询区 Nick Berardi请问我如何通过 C# 计算 string 的 crc32 校验和&#xff1f;回答区 Pete我一直震撼的一件事就是 .NET 底层框架中居然没有提供对 CRC32 的直接支持&#xff0c;CRC32 一直都是 ZIP,RAR 压缩中做校验和的绝佳方案&#xff0c;在 .NET 中你可以这么使用。var…