前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Arduino"权威"构建指北.缘起

Arduino"权威"构建指北.缘起

原创
作者头像
云深无际
修改2020-11-30 11:28:17
1.5K0
修改2020-11-30 11:28:17
举报
文章被收录于专栏:云深之无迹云深之无迹

个人在早年初学Arduino时参考了很多的相关的书籍,但是让我记忆犹新的​有本书是叫<<Arduino权威指南>>,是一个外国人写的书,翻译者是Arduino百度贴吧吧主,此书迄今为止一共出了两版.一直想买来收藏,但是由于种种原因都没有如愿,没有收藏.时值2020年的最后一个月,今年是我写文章的第一年,马上总数就超300篇,可能深度不够,但是自认为广度绝对有.在最后一个月想写几篇最用心的文章,送别2020.希望在这个系列的文章内有所体现.

这里解释一下我起这个标题的名字是为了致敬这本书.权威我个人来讲谈不上,一直都是一个学习者的身份,但是我又想要变成一个权威的人.就标题内斗胆的用了"权威"二字.构建这个词就是系列文章想要描述的东西.Arduino至2005年被欧洲的伊夫雷亚所"制作"出来,距今已经风风雨雨走过15个年头.网上线下各类学校个人团体对于其的使用教程可以说的上是层出不穷.但是唯独少了一份对于Arduino本身的解读,比如ino与cpp,c的文件的关系,#include<Arduino.h>内部有什么?我想让一个硬件开发板支持Arduino开发,我该怎么做?等等问题,都是令人迷惑,甚至是迷茫.这些问题大家都没有提及,只是在用,而不知道背后的原理.所以我会尝试回答这些问题.构建的意思是知道其每一个原子部件的作用,然后去把Arduino"还原出来.指北是因为指南都烂大街了,我就指北吧~南北相对,总有方向可言,而且文章的目的就是为大家指出一个所谓的"方向".(大家有什么疑问都可以在下文留言或者在公众号后台留言,部分资料来源互联网,有遗失未被感谢的小伙伴再次请允许我说句对不起)

https://book.douban.com/subject/26425406/  某豆上面的评论,其实不太好
https://book.douban.com/subject/26425406/ 某豆上面的评论,其实不太好
这就是Arduino权威指南,可以在各大书城买到。当当的质量不好
这就是Arduino权威指南,可以在各大书城买到。当当的质量不好

Ardunio使用的编译器是GCC,然后Ardunio又衍生至Wiring语言(是一个开源的编程构架),同时Ardunio语言又是基于AVR-Libs这个AVR单片机扩展库编写,因为初代的Ardunio开发板就是Atmel家的东西,涵盖中高低所有的产品线。本身的Ardunio开发环境也是基于Processing这个项目改写的,虽然现在社区也在写专属于Ardunio自己的Ardunio Pro但是目前来看最稳定的还是一直在用的版本,还有万里长征最后一步下载到目标板——>AVR-DUDE(avr-dude)这个也是一个优秀的开源项目。

这个就是对于Arduino很宏观的一张思维导图,在系列文章的结尾会绘制一个超大的思维导图
这个就是对于Arduino很宏观的一张思维导图,在系列文章的结尾会绘制一个超大的思维导图

其实聊到Arduino,就不得不说最经典的Uno版本了

经典的UNO版本,初代版是蓝色的
经典的UNO版本,初代版是蓝色的
初代版的双插直列分装型,给出了引jio的映射
初代版的双插直列分装型,给出了引jio的映射

我们所有的一切都是围绕着它讲,学会这个。别的开发板也就是一个迁移的事情了。

我们说一下他的大概参数:

  1. 指示灯(LED)
  2. ON,电源灯,通电ON灯就会亮
  3. TX,串口发送
  4. RX,串口接收
  5. L,就是13引脚的可编程指示灯。高电平或高R态会点亮小灯
  6. 复位键,一键回到最初的原点
  7. 存储空间必须说一下,这里是特指只带的芯片上面的空间。分为三种:
  8. Flash,容量32KB。0.5KB做BOOT区用于存储引导程序,实现串口下载程序的功能。另外的31.5用户自己存储程序,其实这个程序空间已经蛮大的了。
  9. SRAM,2KB。相当于现代计算机里面的内存,CPU做运算时需要在其内部开阔一些空间来存储值。断电丢失
  10. EEPROM,1kb大小、用户可更改的只读存储器。断电与复位后数据不会丢失
  11. 最重要的GPIO数据
  12. 14个数字,6个模拟输入端口
  13. UART为0(RX),1(TX)。用于接收与发送串口数据,两个脚连接在ATmega16U2上与计算机进行串口通信
  14. 外部中断2,3脚,可以输入外部中断信号
  15. PWM输出,3,5,6,9,10和11引脚,输出PWM波使用
  16. SPI,10(SS),11(MOSI),12(MISO),13(SCK)
  17. TWI,A4(SDA),A5(SCL)和TWI接口,可用于TWI通信,兼容I2C通信
  18. AREF,输入模拟参考电压输入端口
找了一下这芯片
找了一下这芯片
https://store.arduino.cc/usa/arduino-uno-rev3
https://store.arduino.cc/usa/arduino-uno-rev3
引脚大图
引脚大图
3D图
3D图
PCB
PCB
此图表适用于DIP封装芯片。Arduino Mini基于较小的物理IC封装,其中包括两个额外的ADC引脚,DIP封装的Arduino实现中不提供。
此图表适用于DIP封装芯片。Arduino Mini基于较小的物理IC封装,其中包括两个额外的ADC引脚,DIP封装的Arduino实现中不提供。
https://store.arduino.cc/usa/arduino-uno-rev3   如果想自己制作一个UNO板子,这里的资料不容错过
https://store.arduino.cc/usa/arduino-uno-rev3 如果想自己制作一个UNO板子,这里的资料不容错过

我这里虽然说是在深层剖析,但是浅层的东西还是得说。所以让我们先认识一下Ardunio软件的内部:

我这里是Dji进行的二次打包的一个arduino版本,和平时使用的版本无疑。对完整安装感兴趣的小伙伴可以看我之前的文章
我这里是Dji进行的二次打包的一个arduino版本,和平时使用的版本无疑。对完整安装感兴趣的小伙伴可以看我之前的文章
这个就是软件内部的所有层级目录,就是这个目录你可以拷贝上。去哪里都可以使用。并不是固定的
这个就是软件内部的所有层级目录,就是这个目录你可以拷贝上。去哪里都可以使用。并不是固定的
打开以后平淡无奇,其实就是一个简陋的编辑器。但是牛逼就牛逼在上面这些神奇的按键里面
打开以后平淡无奇,其实就是一个简陋的编辑器。但是牛逼就牛逼在上面这些神奇的按键里面
截图至VSCode
截图至VSCode
这里是为数不多的Ardunio的设置窗口,上面写的都是中文不细说,重点看下文的一些解答
这里是为数不多的Ardunio的设置窗口,上面写的都是中文不细说,重点看下文的一些解答
这个地方经过我研究,其实是一些GCC编译器的参数。这里设置以后会在新文件的编译过程中有所体现,之后会被下面的窗口捕获输出
这个地方经过我研究,其实是一些GCC编译器的参数。这里设置以后会在新文件的编译过程中有所体现,之后会被下面的窗口捕获输出
我们对于编辑器的一些深层次的配置,不仅是图形化的配置。其实也可以这样用文本化的配置,地址在上面设置的截图内
我们对于编辑器的一些深层次的配置,不仅是图形化的配置。其实也可以这样用文本化的配置,地址在上面设置的截图内
这里用code打开
这里用code打开
我们先关注这里的这个高级配置的文件
我们先关注这里的这个高级配置的文件
代码语言:javascript
复制
board=esp32
boardsmanager.additional.urls=http://arduino.esp8266.com/stable/package_esp8266com_index.json,http://digistump.com/package_digistump_index.json,https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json,http://digistump.com/package_digistump_index.json
build.verbose=false
build.warn_data_percentage=75
cache.enable=true
compiler.cache_core=true
compiler.warning_level=none
console=true
console.auto_clear=true
console.error.file=stderr.txt
console.length=500
console.lines=4
console.output.file=stdout.txt
custom_CPUFreq=esp32_240
custom_DebugLevel=esp32_none
custom_FlashFreq=esp32_80
custom_FlashMode=esp32_dio
custom_FlashSize=esp32_2M
custom_PSRAM=esp32_disabled
custom_PartitionScheme=esp32_minimal
custom_UploadSpeed=esp32_921600
custom_clock=ATtinyX5_internal16
custom_cpu=nano_atmega328old
editor.antialias=true
editor.auto_close_braces=true
editor.caret.blink=true
editor.code_folding=false
editor.divider.size=2
editor.external=false
editor.font=Monospaced,plain,17
editor.indent=true
editor.invalid=false
editor.keys.alternative_cut_copy_paste=true
editor.keys.home_and_end_beginning_end_of_doc=false
editor.keys.shift_backspace_is_delete=true
editor.languages.current=
editor.linenumbers=false
editor.save_on_verify=true
editor.tabs.expand=true
editor.tabs.size=2
editor.update_extension=true
editor.window.height.default=600
editor.window.height.min=290
editor.window.width.default=500
editor.window.width.min=400
export.applet.separate_jar_files=false
export.application.fullscreen=false
export.application.platform=true
export.application.stop=true
export.delete_target_folder=true
gui.scale=auto
ide.accessible=false
last.ide.1.8.12.daterun=1603815279
last.ide.1.8.12.hardwarepath=D:\浏览器下载\官网Arduino发布0903\Arduino IDE(已集成RMTT支持包)\arduino-1.8.12\hardware
last.ide.1.8.13.daterun=1602765138
last.ide.1.8.13.hardwarepath=C:\Program Files (x86)\Arduino\hardware
last.screen.height=2160
last.screen.width=3840
last.sketch.count=1
last.sketch.default.location=1024,76,1665,2098,1592,0
last.sketch.default.path=C:\Users\yunswj\Documents\Arduino\moni_3\moni_3.ino
last.sketch0.location=1024,76,1665,2098,1592,0
last.sketch0.path=C:\Users\yunswj\Documents\Arduino\moni_3\moni_3.ino
last.sketch1.location=1024,726,1000,725,219,0
last.sketch1.path=C:\Users\yunswj\Documents\Arduino\moni_3\moni_3.ino
platform.auto_file_type_associations=true
preferences.readonly=false
preproc.color_datatype=true
preproc.enhanced_casting=true
preproc.imports.list=java.applet.*,java.awt.Dimension,java.awt.Frame,java.awt.event.MouseEvent,java.awt.event.KeyEvent,java.awt.event.FocusEvent,java.awt.Image,java.io.*,java.net.*,java.text.*,java.util.*,java.util.zip.*,java.util.regex.*
preproc.output_parse_tree=false
preproc.save_build_files=false
preproc.substitute_floats=true
preproc.substitute_unicode=true
preproc.web_colors=true
programmer=arduino:avrispmkii
proxy.manual.hostname=
proxy.manual.password=
proxy.manual.port=
proxy.manual.type=HTTP
proxy.manual.username=
proxy.pac.url=
proxy.type=auto
recent.sketches=D:\浏览器下载\官网Arduino发布0903\Arduino IDE(已集成RMTT支持包)\arduino-1.8.12\hardware\espressif\esp32\libraries\ESP32\examples\Camera\CameraWebServer\CameraWebServer.ino,C:\Program Files (x86)\Arduino\examples\01.Basics\Blink\Blink.ino,C:\Users\yunswj\Documents\Arduino\moni_3\moni_3.ino,C:\Users\yunswj\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\SPI\examples\BarometricPressureSensor\BarometricPressureSensor.ino,C:\Users\yunswj\AppData\Local\Arduino15\packages\Intel\hardware\i586\1.6.7+1.0\libraries\WiFi\examples\ScanNetworks\ScanNetworks.ino
run.display=1
run.options=
run.options.memory=false
run.options.memory.initial=64
run.options.memory.maximum=256
run.present.bgcolor=#666666
run.present.exclusive=false
run.present.stop.color=#cccccc
serial.databits=8
serial.debug_rate=9600
serial.line_ending=1
serial.parity=N
serial.port=COM3
serial.port.file=COM3
serial.port.iserial=null
serial.stopbits=1
sketchbook.path=C:\Users\yunswj\Documents\Arduino
software=ARDUINO
target_package=espressif
target_platform=esp32
theme.file=
update.check=true
update.id=-5419564387102345343
update.last=1603815222420
upload.using=bootloader
upload.verbose=false
upload.verify=true

我这里把这个代码块贴一下

代码语言:javascript
复制
开发板= esp32
其他网址= http://arduino.esp8266.com/stable/package_esp8266com_index.json,http://digistump.com/package_digistump_index.json,https://raw.githubusercontent.com/damellis/attiny/ide-1.6 .x-boards-manager / package_damellis_attiny_index.json,http://digistump.com/package_digistump_index.json
建立详细= false
构建警告数据百分比= 75
缓存enable = true
编译器缓存core = true
编译器警告级别=无
console = true
控制台自动清除= true
控制台错误文件= stderr.txt
控制台长度= 500
控制台线= 4
控制台输出文件= stdout txt
自定义CPU Freq = esp32_240
自定义调试级别= esp32_none
自定义Flash频率= esp32_80
自定义Flash模式= esp32_dio
自定义Flash大小= esp32_2M
自定义PSRAM = esp32禁用
自定义分区方案= esp32_minimal
自定义上传速度= esp32_921600
自定义时钟= ATtinyX5_internal16
自定义cpu = nano_atmega328old
编辑器anti alias = true
编辑器自动关闭大括号= true
编辑符插入眨眼= true
编辑器代码folding = false
编辑器分隔线大小= 2
编辑器external = false
编辑器字体=等宽,纯色,17
编辑器indent = true
编辑器invalid = false
编辑器键替代剪切副本paste = true
编辑器的起始键和结束键doc = false
编辑器键移位退格键为delete = true
编辑器语言current =
编辑器行号= false
编辑器保存在verify = true上
编辑器标签expand = true
编辑器标签大小= 2
编辑器更新扩展名= true
编辑器窗口高度默认= 600
编辑器窗口高度最小值= 290
编辑器窗口宽度默认= 500
编辑器窗口宽度最小= 400
导出applet单独的jar文件= false
全屏导出应用程序= false
导出应用程序平台= true
导出应用程序stop = true
导出删除目标文件夹= true
gui scale =自动
ideaccess = false
最后一个ide.1.8.12日期运行= 1603815279
最后一个ide.1.8.12硬件路径= D:\浏览器下载\官网Arduino发布0903 \ Arduino IDE(已集成RMTT支持包)\ arduino-1.8.12 \ hardware
最后一个ide.1.8.13 daterun = 1602765138
最后一个ide.1.8.13硬件路径= C:\ Program Files(x86)\ Arduino \ hardware
上一屏高度= 2160
最后屏幕宽度= 3840
最后素描数= 1
最后素描默认位置= 1024、76、1665、2098、1592,0
最后素描默认路径= C:\ Users \ yunswj \ Documents \ Arduino \ moni_3 \ moni_3.ino
上一个草图0位置= 1024,76,1665,2098,1592,0
最后一个草图0 path = C:\ Users \ yunswj \ Documents \ Arduino \ moni_3 \ moni_3.ino
上一个草图1位置= 1024,726,1000,725,219,0
最后一个sketch1路径= C:\ Users \ yunswj \ Documents \ Arduino \ moni_3 \ moni_3.ino
平台自动文件类型关联= true
首选项readonly = false
preproc颜色datatype = true
前过程增强型铸造= true
preproc导入list = java applet *,java.awt.Dimension,java.awt.Frame,java.awt.event.MouseEvent,java.awt.event.KeyEvent,java.awt.event.FocusEvent,java.awt.Image, java.io。*,java.net。*,java.text。*,java.util。*,java.util.zip。*,java.util.regex。*
preproc输出分析树= false
preproc保存构建文件= false
前过程替代floats = true
前过程替代unicode = true
前处理网页颜色= true
程序员= arduino avrispmkii
代理手册主机名=
代理手动密码=
代理手动端口=
代理手册类型= HTTP
代理手册用户名=
代理pac url =
代理类型=自动
最近的草图= D:\浏览器下载\官网Arduino发布0903 \ Arduino IDE(已集成RMTT支持包)\ arduino-1.8.12 \ hardware \ espressif \ esp32 \ libraries \ ESP32 \ examples \ Camera \ CameraWebServer \ CameraWebServer.ino ,C:\ Program Files(x86)\ Arduino \ examples \ 01.Basics \ Blink \ Blink.ino,C:\ Users \ yunswj \ Documents \ Arduino \ moni_3 \ moni_3.ino,C:\ Users \ yunswj \ AppData \ Local \ Arduino15 \ packages \ arduino \ hardware \ avr \ 1.8.3 \ libraries \ SPI \ examples \ BarometricPressureSensor \ BarometricPressureSensor.ino,C:\ Users \ yunswj \ AppData \ Local \ Arduino15 \ packages \ Intel \ hardware \ i586 \ 1.6 .7 + 1.0 \ libraries \ WiFi \ examples \ ScanNetworks \ ScanNetworks.ino
运行显示= 1
运行选项=
运行选项memory = false
运行选项memory initial = 64
运行选项内存最大值= 256
运行当前bgcolor =#666666
运行当前Exclusive = false
运行当前停止颜色=#cccccc
串行数据位= 8
串行debug_rate = 9600
串行line_ending = 1
串行奇偶校验= N
串口= COM3
串口文件= COM3
串口iserial = null
串行停止位= 1
写生路径= C:\ Users \ yunswj \ Documents \ Arduino
软件= ARDUINO
目标包装=浓缩咖啡
目标平台= esp32
主题文件=
更新检查= true
更新ID = -5419564387102345343
更新last = 1603815222420
使用= bootloader上传
上传verbose = false
上传verify = true

我做了一个简短的翻译,感兴趣的小伙伴可以去设置一下。后面我有时间写一个图形化的设置器也可以。这篇就先到这里~下篇再见

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档