数码之家

 找回密码
 立即注册
搜索
查看: 620|回复: 4

[Arduino] 《ESP32S3 Arduino开发指南》 第二章 Arduino基础知识

[复制链接]
发表于 2025-2-21 17:37:41 | 显示全部楼层 |阅读模式
本帖最后由 正点原子官方 于 2025-2-21 17:38 编辑

第二章 Arduino基础知识



本章,我们将向大家介绍Arduino是一个什么东西?让大家对Arduino有一个大概了解。
本章将分为如下几个小节:
  • 2.1什么是Arduino
  • 2.2 Arduino的由来
  • 2.3 Arduino的优势
  • 2.4 Arduino语言
  • 2.5 Arduino程序结构







2.1 什么是Arduino
        Arduino即为开源硬件。可以说Arduino从真正意义上推动了开源硬件的发展,在Arduino出现以前,虽然也有很多公司在推广一些简单易用的可编程控制器,但是由于开发平台种类繁多,而且使用这些控制器基本上都需要对电子技术、数字逻辑、寄存器等内容进行多方面的了解和学习,才能完成一个电子产品的制作。这就给开源硬件的推广和普及设定了一个很高的门槛,电子爱好者需要花很多时间和精力才能开始开发和制作自己的作品。而使用Arduino能很快地完成一个电子产品的制作,这是由于Arduino提供了一个开放易学,进入门槛相对较低的开发平台,让电子爱好者对于开源硬件的广泛使用变成了可能。
        广泛来说,Arduino指的是一个生态,这里就包括Arduino开发板、Arduino IDE以及周边资料,其中包括社区、驱动库以及示例代码等,如下图2.1.1所示:
2.1.1 Arduino生态图
        现今,Arduino开发板有很多,正点原子ESP32-S3开发板也是属于Arduino开发板,简单来说,只要是搭载Arduino支持芯片的开发板都可以称为Arduino开发板。目前支持Arduino开发的芯片有很多,比如Mega系列芯片(Mega328p/Mega2560/Mega32u4等)STM32系列芯片(STM32F0/F1/F2/F3/F4/F7/H7等)ESP系列芯片(esp32/esp32s2/esp32c3/esp32s3等)以及树莓派系列芯片等。这里的实质就是有每个系列芯片对应要有一个Arduino库,比如乐鑫官方的arduino-esp32库,STstm32duino库,只要在Arduino安装这种芯片库便可以使用Arduino的语法在Arduino IDE上对芯片进行开发。
        Arduino IDEArduino Integrated Development Environment集成开发环境的简称。本教程就是基于该软件对ESP32-S3进行开发。该IDE比较遗憾的是没有调试功能,在后面“Arduino开发环境搭建”章节会对这个软件进行讲解。
        得益于广大的电子爱好者对于开源硬件的贡献,Arduino的社区活跃度很高,驱动库种类繁多而且有些一直存在更新迭代,不断完善,示例代码功能也越来越健全。使用Arduino IDE进行开发,由于驱动库是相互兼容的,很多代码不需要修改就可以直接使用,这就可以让从芯片替代成本变得很低,也让越来越多电子爱好者参与Arduino生态的建设。

2.2 Arduino的由来
Arduino是一种基于开源硬件和软件的电子原型平台,它由一个意大利的团队于2005年创建。该团队的成员包括Massimo BanziDavid CuartiellesCarlo GaloppiniMichael Margolis,如下图2.2.1所示
2.2.1 Arduino创始团队
2005年冬天,Massimo BanziDavid Cuartielles为了解决找不到既便宜又好用的微控制器的现状,两人决定设计自己的电路板,并且在这期间吸收了Banzi学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程序代码。又过了三天,电路板就完工了。
据说这个Arduino名字的由来是,Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,这酒吧是以1000年前意大利国王Arduin的名字命名的,为了纪念这个地方,他将这块电路板命名为Arduino
随后,BanziCuartiellesMellis把设计图放到了网上。版权法可以监管开源软件,却很难用在硬件上,为了保持设计的开放源码理念,他们决定采用Creative Commons(CC)的授权方式公开硬件设计图。在这样的授权下,任何人都可以生产电路板的复制品,甚至还能重新设计和销售原设计的复制品。人们不需要支付任何费用,甚至不用取得Arduino团队的许可。然而,如果重新发布了引用设计,就必须声明原始Arduino团队的贡献。如果修改了电路板,则最新设计必须使用相同或类似的Creative Commons(CC)的授权方式,以保证新版本的Arduino电路板也会一样是自由和开放的。唯一被保留的只有Arduino这个名字,它被注册成了商标,在没有官方授权的情况下不能使用它。短短的几年时间,Arduino在全球积累了大量用户,推动了开源硬件、创客运动,甚至是硬件创业领域的发展,越来越多的芯片厂商和开发公司宣布自己的硬件支持Arduino

2.3 Arduino的优势
        使用Arduino去开发硬件,技术门槛很低。几乎任何人,即使不懂电脑编程也能用Arduino做出很酷的东西,比如点灯,控制马达,对传感器进行回应。
简单来说,使用Arduino去开发优势非常明显,可以归纳为一下5点:
1、跨平台
Arduino IDE可以在WindowsMac OS XLinux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
2、简单清晰的开发
Arduino IDE基于Processing IDE开发,这对于开发板来说极易掌握,同时又有足够的灵活性。Arduino语言是基于Wiring语言开发的,是对AVR-GCC库的二次封装,并不需要太多的单片机基础和编程基础,只要简单的学习后就可以快速地进行可开发。
3、开放性
Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内可以任意修改原始设计及相应代码。
4、社区和第三方支持
Arduino有着众多的开发者和用户,因此可以找到他们提供的众多开源的示例代码和硬件设计。例如,可以在Githun.comArduino.ccOpenjumper.com等网站上找到Arduino的第三方硬件、外设和类库等支持,以便更快、更简单地扩展自己的Arduino项目。
5、硬件开发趋势
Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注于创意和实现,可以更快地完成自己的项目开发,大大节约学习的成本,缩短开发周期。
鉴于Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发项目和产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;在大学里,自动化、软件专业,甚至艺术专业,也纷纷开设了Arduino相关课程。

2.4 Arduino语言
Arduino使用C/C++语言编写程序,虽然C++兼容C语言,但是这两种语言又有所区别。C语言跟C++语言最大的区别在于:C语言是一种面向过程的编程语言,而C++是一种面向对象的编程语言。早期的Arduino核心库使用C语言编写,后面引进了面向对象的思想,目前最新的Arduino核心库采用CC++混合编程。
通常所说的Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(Applocation Programming Interface,简称API)的集合。这些API是对更底层的单片机支持库进行二次封装所形成的。例如,使用ESP单片机的Arduino核心库是对ESP-IDF库的二次封装。
在使用ESP-IDFESP32进行开发中,将一个I/O口设置为输出高电平状态需要以下操作:
gpio_set_direction(GPIO_NUM_1, GPIO_MODE_OUTPUT);
gpio_set_level(GPIO_NUM_1, PIN_SET);
ESP-IDF中,这个代码架构是可以减少对底层的理解要求,不需要明白寄存器的意义及其之间的关系,来达到配置多个寄存器来达到目的。但是在别的芯片中,比如传统的AVR芯片以及STM32芯片中,这是需要去理解寄存器的。
PinMode(1, OUTPUT);
digitalWrite(1, HIGH);
        这里的pinMode即是设置引脚的模式,这里设定了1脚为输出模式;而digitalWrite(1, HIGH)则是使1脚输出高电平数字信号。这些封装好的API使得程序中的语句更容易被理解,因此可以不用理会单片机中繁杂的寄存器配置就能直观地控制Arduino,在增强了程序可读性的同时,也提高了开发效率。
        若在使用时存在arduino库无法实现对芯片的外设驱动时,也可以考虑包含esp-idf函数所在头文件对里面函数进行调用,来完成该驱动的实现。

2.5 Arduino程序结构
Arduino程序中,是没有main函数的,这跟传统的C/C++程序结构有所不同。
其实并不是Arduino程序中没有main函数,而是main函数的定义隐藏在了Arduino的核心库文件中,这个是需要我们去到核心库中才能找到main函数的踪影。在进行Arduino开发时一般不直接操作main函数,而使用setup()loop()这两个函数。
接下来,看一下Arduino程序的基本结构,如下:
void setup() {
  // 在这里填写setup函数代码,它只会运行一次
}

void loop() {
  // 在这里编写loop函数代码,它会不断重复运行
}
Arduino程序的基本结构由setup()loop()两个函数组成。
1setup()
Arduino控制器通电后或复位后,会开始执行setup()函数中的程序,该程序只会执行一次。
通常是在setup()函数中完成Arduino的初始化设置,如配置I/O口转台和初始化串口等操作。
2loop()
setup()函数中的程序执行完毕后,Arduino会接着执行loop()函数中的程序。而loop()函数是一个死循环,其中的程序会不断地重复运行。
通常在loop()函数中完成程序的主要功能,如驱动各种传感器获取数据等。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2025-2-24 10:57:16 | 显示全部楼层
感谢分享,那啥,第一章在哪里?怎么没有找到
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-24 11:11:49 | 显示全部楼层
寒稞 发表于 2025-2-24 10:57
感谢分享,那啥,第一章在哪里?怎么没有找到

第一章的内容并不是很重要,而且链接很多,担心被删就没有发,如果您这边有需要的话,可以到下面这个网址里打开百度网盘的资料链接,直接获取完整PDF资料:
http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html
回复 支持 反对

使用道具 举报

发表于 2025-2-24 11:59:25 | 显示全部楼层
同问,第一章哪去了?
回复 支持 反对

使用道具 举报

发表于 2025-3-20 20:18:35 来自手机浏览器 | 显示全部楼层
学习了学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-12 03:57 , Processed in 0.202800 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表