什么是Arduino?Arduino的起源与架构简述
目录
发展历程
概述
IDE介绍
开发语言
兼容板
兼容板开发注意事项
Arduino与Zephry的不同点
基本代码架构
发展历程
起始地区 |
命名&开源协议 |
创建者 |
创立起因 |
---|---|---|---|
2005年-意大利北部小镇伊夫雷亚 | Arduino /CC开源 | Massimo Banzi && David Cuartielles | 因找不到便宜而又通用合适的电路板 |
概述
- Arduino是一个偏向通用且开源的硬件框架,任何人都可以下载到Arduino的硬件设计图,并进行修改与发布,不需要经过Arduino团队的允许,但需要标明你的硬件框架是基于Arduino框架
- Arduino在最初设计就为了通用,易用而生,为了让开发者节约开发成本,所以开发了一套IDE与类C的编程语言,但是比C更简单,使得我们不需要去关心指针,底层硬件模块原理
IDE介绍
Arduino考虑到易用性,为了让大家能够快速上手所以基于Processing IDE开发了一套Arduino IDE,Processing IDE是第一款GUI可视化编程语言IDE,由麻省理工大学1996年研发,一经研发便名声大振,因为它改变了当时只能用命令行来编程的环境,使得编程易用性学习性变得简单了,并且它也是首款可以开发GUI界面的程序
<Processing IDE>
<Arduino IDE>
此外,还有许多IDE已经支持Arduino,如Visual Studio Code已经推出了Arduino一体的开发插件,支持代码下载,开发板管理等
开发语言
Arduino语言是使用wiring语言作为二次开发的语言,wiring语言是对avr-gcc库的二次封装,avr-gcc是专为单片机开发的glib c库,目的是高效,速度,且专为单片机开发的C库,它比常用的GCC速度要快许多
wiring语言里封装了许多针对硬件控制的函数,它相当于一个硬件控制库,具体可以参考树莓派的wiringPI
所以我们在开发时只需要调用里面的库函数就可以完成对硬件的控制,不需要去写复杂的指针方面的代码,甚至一些简单的硬件都不需要去看芯片手册,只需要知道这个函数怎么用就可以了
如点亮LED只需要两行代码
pinMode(pin1, OUTPUT); //设置管脚1为输出模式
digitalWrite(pin1, HEIGHT); //向管脚1写入高电平, 点亮LED灯亮
Arduino的解释器是使用Java编写而成,需要区分一下解释器、编译器与编程语言的区别,编译器是负责将编程语言翻译为可执行的二进制文件,主要负责检查编程语言语法错误,语义问题,代码汇编优化工作,而语言不同,语言是用来描述程序应该怎样工作,编译器的作用就是解释描述并翻译成对应的机器指令以及生成对应的可执行文件,可执行文件其实就是一大堆CPU指令集,用于告诉CPU怎么工作,而解释器就类似Makefile,根据规则去调用不同的编译器来合并编译生成对应的文件,Arduino使用Java来写编译器,然后合并调用wiring库。
兼容板
是指被Arduino支持的板子,可以通过Arduino IDE加载指定开发板,一般开发板的厂商如果想要与Arduino兼容会按照Arduino的规范编写一个类似Zephry/Linux上的dts文件,并写一个json文件用于告诉Arduino如何安装与配置这些描述文件,然后在通过Arduino IDE下载并安装这些板子的描述文件,就可以通过Arduino IDE来对对应的板子进行开发了。
如STM32官方就推出了stm32duino,其描述文件在github上开源:http://study.arduino-esp32.cn/study/STM32/package_stmicroelectronics_index.json
这里用STM32作为演示下载它的板子描述文件并加载到Arduino上
首先我们只需要将描述文件地址放入Arduino IDE的文件-首选项-附加开发板管理器网址
然后打开工具-开发板管理器
就可以看到这个描述文件中涵盖了STM32厂商的所有板型
在安装完成之后就可以在开发板中选中你所使用的STM32 MCU型号,然后就可以开始开发了,选中型号之后Arduino里的一些引脚地址都会根据MCU型号而变化,所以一套代码可以通用在不同的架构上,Arduino会根据选择的MCU而发生改变,所以尽量使用Arduino官方提供的宏定义或函数
这里需要注意STM32Duino使用的是STM32CubeProgrammer作为固件下载器,所以需要在下载一个STM32CubeProgrammer,并添加到环境变量才能被Arduino识别,Arduino IDE会根据提供的描述文件来选择下载器
这里给出下载地址:STM32CubeProg - STM32CubeProgrammer software for all STM32 - STMicroelectronics
只需要根据你当前系统环境选择对应的版本,并安装好了之后将bin路径添加到系统环境变量中就可以了,Arduino会自动调用
并且我们也可以自己定义与生成lib库,可以方便在不同工程中调用
兼容板开发注意事项
需要值得注意的是引脚编号,上面说过选中对应MCU型号引脚地址会自动改变,但是编号不会,在Arduino中所有引脚以PIN为标识,而STM中由PA,PB等,所以它们之间有一个STM32引脚到Arduino的映射关系,兼容板官方都会提供的,这里给出部分STM32的引脚映射关系:
STM32 PA引脚
Arduino |
Stm32 |
---|---|
PIN0 | PA0 |
PIN1 | PA1 |
PIN2 | PA2 |
PIN3 | PA3 |
PIN4 | PA4 |
PIN5 | PA5 |
PIN6 | PA6 |
PIN7 | PA7 |
PIN8 | PA8 |
PIN9 | PA9 |
STM32 PB引脚
Arduino |
STM32 |
---|---|
Arduino |
STM32 |
PIN16 | PB0 |
PIN17 | PB1 |
PIN18 | PB2 |
PIN19 | PB3 |
PIN20 | PB4 |
Arduino与Zephry的不同点
Arduino与Zephry不同的是我们不需要去修改MCU的描述文件,其实在Arduino中我们一般也修改不了,因为Arduino对其进行了一层封装,使得我们不像Zephry那样可以随意查看dts文件,其次是我们也并不需要修改,因为Arduino兼容板提供的MCU描述文件里面已经全面描述了整个原理图中的引脚和模块,我们可以随意使用,其次是Arduino不像Zephry那样可能还需要去修改DTS文件开启驱动,这里我们是不需要的,因为Arduino没有驱动这个概念,只有wiring语言,使用这个语言里提供的一些函数库去控制硬件,等于我们自己去实现驱动,但是实现是非常简单的,因为wiring里对硬件封装的非常全面,具体可以参考树莓派的wiringPI
基本代码架构
在新建Arduino工程会看到如下基础代码
void setup() {// put your setup code here, to run once:}void loop() {// put your main code here, to run repeatedly:}
setup
只会执行一次,在开始时执行
loop
在setup执行完成之后,会循环执行loop
什么是Arduino?Arduino的起源与架构简述相关推荐
- 关于前端开发:起源、架构、变迁
关于前端开发:起源.架构.变迁 目录 关于前端开发:起源.架构.变迁 目录 变迁 前端应用的领域 浏览器 服务器 终端和跨端 关于前端开发:语言.框架.工具 语言 框架 工具 互联网标志性通信协议 T ...
- JAVAWeb01-BS架构简述、HTML
1. B/S 软件开发架构简述 1.1 Java Web 技术体系图 1.2 B/S 软件开发架构简述 B/S架构 B/S框架,意思是前端(Browser 浏览器)和服务器端(Server)组成的系统 ...
- Pure MVC 架构简述
Pure MVC 架构简述 前言 游戏UI开发中,常常使用MVC架构(Model数据.View界面.Controller控制).这个架构方便解耦数据.界面和交互逻辑.一般来说V可以持有M,C可以持有V ...
- php传输数据arduino,Arduino如何和php,html文件一起使用?
C文件: #include #include byte mac[] = { 0x90,0xA2,0xDA,0x00,0x55,0x8D}; //Replace with your Ethernet ...
- 一篇文章让你读懂 OpenStack 的起源、架构和应用
OpenStack 是一个面向 IaaS 层的开源项目,用于实现公有云和私有云的部署及管理.拥有众多大公司的行业背书和数以千计的社区成员, OpenStack 被看作是云计算的未来.目前 OS 基金会 ...
- android usb arduino,Arduino Android OTG USB
Arduino Android OTG USB 介绍 Arduino Android OTG USB This helps you to connect any arduino to android ...
- arduino——Arduino电容测量计
Arduino电容测量计 点击Arduino电容测量计在线仿真 定义 电容被定义为身体存储电荷的能力.电容的单位是法拉(符号:F),以英国物理学家迈克尔·法拉第的名字命名.1 法拉电容器在充电时具有 ...
- [Arduino] Arduino Uno R3 中文介绍
Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板.UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出 ...
- [Arduino] Arduino猪头笔记
1. 步进电机驱动 今天才发现....原来在不同的步进电机驱动模块里面,循环时钟是不一样的.... 步进电机驱动模块以及电路配置: 驱动代码的主要部分: int sp_param = 16383; d ...
最新文章
- 解决MongoDB 日志文件过大,清理后还占用很大磁盘空间的问题
- C# 导出word文档及批量导出word文档(2)
- linux服务器 32核,Intel换成AMD 32核锐龙 Linux之父体验很好
- AC66U-B1) 刷梅林固件教程
- spring-使用配置文件完成JdbcTemplate操作数据库
- C++学习之路 | PTA乙级—— 1032 挖掘机技术哪家强 (20 分)(精简)
- 成为被 BAT 疯抢的数据分析师,要如何精进技术?
- 轻松逃脱某防火墙对ss的探测
- ElasticSearch中的分析器是什么?
- MQTT-WebSocket连接通信
- ASP.NET Core 下的依赖注入(一)
- 2020-12-07
- 电源大师课笔记 3.3
- tcpip详解有必要看吗_全屋净水知识|前置过滤器有必要安装吗?看完秒懂
- Gateway服务网关
- ActiveMQ高可用集群的搭建
- 轻量化安装 TKEStack:让已有 K8s 集群拥有企业级容器云平台的能力
- HR必备基础能力之人性
- 记录:英文参考文献格式
- 2022-2028年全球与中国机身导线行业产销需求与投资预测分析
热门文章
- matlab中 spm,使用SPM批处理在MATLAB中运行预处理
- C语言编程>第十一周 ⑤ 请编写一个函数,用来删除字符串中的所有空格。
- YOLO—神经网络原理
- 自动化测试平台化[v1.0.0][微服务化测试平台]
- vite+vue3打包后图片404问题:已解决
- 电影评分数据集的分析
- 百度Aistudio飞桨七日游体验python爬虫和分析数据
- 安装QT5 出现错误 unkown type name ‘QApplication’ unkown type name ‘MainWindow’
- 【spark】Spark环境搭建(运行模式)
- 掌握 HTML 定位技巧,轻松打造精美网页布局