Arduino极速入门教程——两篇文章让你会用Arduino(下)

接上篇关于Arduino基础环境配置、界面介绍和C语言基础,这一篇的内容为具体如何在Arduino中进行编程。 在VSCode上配置Arduino 什么是VSCode VSCode,即Visual Studio Code,是微软制作的一个开源免费编辑器,当今始接最热门的主流代码编辑器之一。百度vscode或者点我给出的这个链接,可以进到官网下载。编辑器与IDE(集成开发环境)不同,VSCode更加像一个可以加载插件的记事本,不过如果配置得当,VSCode也可以用来当作一个简陋的IDE使用。 为什么用VSCode Arduino IDE本身其实只是一个非常简陋的IDE,没有代码补全、丰富的高亮、代码跳转重构等功能,而这些我们都可以在VSCode上进行实现,这可以是不必要的(如果你能力足够强用记事本直接写代码也是可行的),但是作为初学者或者开发者使用这些功能能够让你快速学习或者实现你想要实现的功能。 怎么配置 先下载并安装VSCode。 接着下载插件,在最左边选择扩展按钮,然后搜索并安装我标出的这几个插件,你就能有一个可以装Arduino的中文VSCode了(我的VSCode与你们的应该样式不同,因为我安装了样式的插件): 然后打开安装好的VSCode,左上角选择:文件-打开文件夹,然后选择一个你以后专门保存Arduino代码的文件夹打开。 在左上角文件选项中选择首选项-设置。 然后设置界面的右上角,选择打开设置(json) 然后我们就进入到了一个JSON文件界面,在原本的文件开头如下内容,不过需要注意:下面第一行的path为你安装Arduino的位置,我安装在D:/Software/Arduino文件夹里的,如果设置自己的地址也请按照我这种双斜杠的格式来写。 "arduino.path": "D:\\Software\\Arduino", "C_Cpp.intelliSenseEngine": "Tag Parser", "editor.insertSpaces": true, "files.autoGuessEncoding": true, "arduino.logLevel": "info", "explorer.confirmDelete": false, "editor.detectIndentation": false, 点击Ctrl+s保存JSON文件,然后重启VSCode,现在你的VSCode环境就配置好了。 Arduino的程序内容 打开例程 现在我们先来打开一个官方例程,首先打开Arduino IDE,选择文件-示例-Basic-Blink,这是Arduino官方提供的一个灯光闪烁程序。 点开后按Ctrl+S,IDE会告诉你该文件处于只读状态,需要将项目保存在其它位置,点击确定,然后将文件保存在我们前面设置的VSCode工作文件夹里,然后我们就可以退出并通过VSCode打开它了。 例程将会是我们很好的学习资源,这些例程有些来自于开发板,有些来自于函数库,有些来自于官方,但是我们如果已经安装好的东西,找例程并且想要在VSCode中进行修改测试或者仅仅是查看,都可以通过这种方式来。 程序结构 我们现在可以发现其实这个Blink中有两个函数setup和loop,它们的功能我在下图中标示了: setup和loop是Arduino的逻辑核心,普通的Arduino程序都是基于这两个函数进行运行的,一般我们在setup中初始化环境,然后在loop区域写我们需要实现的功能。 如果想知道这两个函数是怎么实现的,可以查看{你的Arduino安装地址}\hardware\arduino\avr\cores\arduino中main.cpp和Arduino.h文件,大概意思就是我们在程序中实现的setup和loop函数将会通过Arduino.h被引用,然后在main.cpp中被执行,Arduino.h只是一个引用传递文件,这里我们重点关注main.cpp: 功能函数 现在我们再来看看Blink文件: // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } 前面那一堆介绍注释我就不复制了,有兴趣自己看,我们现在关注程序中出现的功能函数:pinMode()、digitalWrite()、delay()。 ...

February 2, 2021 · 云雾海

Arduino极速入门教程——两篇文章让你会用Arduino(上)

开坑使我快乐,本教程仅供初学者入门学习使用,要想深入还是得靠自己。本教程假设读者为完全无编程基础的普通人,所以行文可能会稍显啰嗦,但相信仍然会是目前比较精炼简短的教程。 Arduino是啥 一个开源的硬件开发平台,其特点在于简单易学易上手,而且国内外资源多,有啥问题也好解决。 Arduino要些什么知识 基础 有这些基础你基本上可以用Arduino做出网上常见的60%的项目。 C语言基础和一点面向对象语言编程概念 Arduino编程时使用C++,但是C++是兼容C语言的,一些简单基础的部分有C语言基础就能实现。 在基础使用时我们仍然会使用到面向对象编程的东西,先掌握概念和一点基础的东西,初学阶段够用就行。 初中电学知识和一点数电模电概念 知道短路、断路概念还有电压电流电阻之间的关系计算,这是硬件制作最基础的东西。 有一些涉及电容、电感、半导体的内容,这些一般属于模电知识,初学的时候不需要了解,因为我们可以用别人做好的电路,稍微连连线就行。 数字电路会是一个很常用的概念,不过初学阶段你只需要知道二进制计算就行。 时间、精力和钱 虽然Arduino的资料很多,但是偶尔你也可能遇到百度上找不到的问题(也有可能是你因为知识不够无法形容出来的问题),要把这些问题解决你需要花很多时间来搜索、学习、试错。 学习是一个很耗费精力的事,事实上你最好喜欢一样知识或者有一个明确需要学习它的理由,才能更好坚持下来。 Arduino属于硬件开发平台,和平常我们电脑手机上开发一个程序软件游戏不同,硬件购买时将会花费大量的金钱,我会在后面不时提一下怎么尽量省钱去买这些硬件,但是实际学习中你仍然要做好花钱的准备。 不过不要被我上面说的吓到了,毕竟硬件如果能做好也是可以带来收入的,很多东西都是会者不难,难者不会,现代社会赚钱不就是赚信息差嘛。我在学Arduino没多久的时候,靠着百度搜搜改改,就用它接到了我人生中的第一笔单子,用了一下午赚了三百块。 进阶 这些是你觉得自己已经行了之后可以继续深入学习的方向,本教程会不时提及但是不做详述。 C++语言编程 C++是Arduino的核心语言,虽然运行效率略低于直接用C,但是其带来的方便性可以让我们无视这几毫秒。 网上说C++有点难学,但是不要担心,你只是需要用它来做Arduino而已,不会怎么用到C++那些乱七八糟的复杂特性。 嵌入式编程 当你可以自己从底层上将一个全新的芯片做成Arduino的时候,你就可以算嵌入式编程入门了。 有句话叫嵌入式门槛在门里,前期简单入门做点简单事不用担心,但是越到后面学习难度越陡峭,请提前做好准备。 操作系统 这里涉及到嵌入式编程的高级操作了,主要目的是为了实现多线程(让芯片同一时间处理多件事),不需要去详细学,接触到嵌入式后自然会学到 如果你从软件那边往嵌入式这边学的话也会学到这个东西,操作系统往上就是我们平常在系统环境上的编程,往下就是针对硬件的编程 网络编程 这个主要是未来物联网开发会更加多,甚至现在所谓的嵌入式编程和物联网编程都有点代称的感觉了,所以你需要掌握一定的网络编程的知识 如果你有操作系统上的网络编程开发经验,那么你在理解这一块上会比较容易,而如果你学会了这块,后面想学互联网行业的技术也会比较容易 复杂的电路知识 初中那点电路知识在这肯定是不够的,高频射频电路、高速电路的设计,这些也是可以学习的一个点(但是不是必学的,因为这一块实际上会有专门的开发人员),当然实际上这里也包括了半导体设计、FPGA啥的(这又是另外一个行业了,但是了解一些知识有助于更好地理解一些底层原理) 玩Arduino的大多都是对极客、发明家之类的感兴趣的朋友,所以会电路设计肯定会让你节省下更多的时间精力和钱 非常非常多的时间、精力和钱 你要深入学习那么路线就肯定是很陡峭的,事实上我在上面罗列的这些东西也只是所有知识的冰山一角,不过你既然都看到这了想必也下定决心了,所以,加油吧。 学习须知 请务必保持不求甚解的态度,所有的东西你不需要挨个记住,只需有个大概印象即可,因为有些知识并不是你后来会常用的,花时间去记浪费时间又容易造成挫败感,而经常用的东西你在多用了之后自然就记住了。 有个大概印象后需要多自己做项目,做点小玩意,可以搜索借鉴代码,但是要多思考,这样才能帮助你融会贯通所学的知识,也才能让你从一大堆知识中总结凝练出能够帮助到自己的东西。 环境搭建 在看完这一章之前先别买硬件,免得吃亏买贵了。 百度Arduino,你一般会看到最前面的两个链接,其中一个是英文官网,另二个是中文社区。这两个网站里面都有安装包可以下载,我们这里举例为选择官网下载,点击我上面给的链接即可进入英文官网,然后界面中依次选择:Software-Download,在出现的下载界面里点击你需要的程序包。 如果选择ZIP file你将获得一个压缩包,这个属于免安装的方式,直接解压就可以使用,更方便,但是稳定性弱点(一般也没啥)。其中Windows平台不建议点那个Windows app选项,那个是从Windows应用商店下载安装的,这种安装方式有时候要搞点花的不方便。 下载好后你将获得一个安装程序或者压缩文件,将Arduino安装或解压到你一个找得到的位置即可,它可能会让你安装一个驱动,同样安装即可。 然后你的Arduino环境就搭建好了,非常简单。 界面介绍 现在打开你的Arduino(实际上它叫Arduino IDE,即Arduino的集成开发环境): 让我们来看看界面长啥样: 可以看到,下载安装好后它就是一个不大简单的中文界面,现在我将其放大然后标注一下主界面的内容: 配置 为了方便起见,在此对我们的Arduino IDE进行配置一下,点击文件-首选项: 然后我们可以看到新界面,也没啥大变化,多了个行号和可折叠符号,不喜欢也可以去掉,不过建议留着,比较方便: 设置完了,我们再看看工具栏中还有一些其它什么有用的功能没: 文件 首先点开文件,这里面最重要的除了刚才讲过的首选项界面,另一个就是示例了,里面给出了很多例子供以学习: 编辑 然后是编辑界面,这里有一个复制到论坛和复制为HTML可以把代码以特定格式进行全部复制,便于分享; 另外下面还有三行关于注释、缩进的功能,如果再框选一大段文字后通过快捷键进行操作的话,可以实现块注释和块缩进: ...

February 1, 2021 · 云雾海

MSP432在Energia上的使用(下)

MSP432 在 Energia 上的使用(下) 其实我自己都没想到我居然会来填坑,不过说实话这好像也算不上填坑,毕竟之前在MSP430 在 Energia 上的使用(上)这个帖子里讲的是 MSP430,而且说的准备在 VSCode 里装 Energia 其实到现在还没弄,不过这里还是想介绍一下 Energia 的另一项功能,一个专属于 MSP432 的功能。 MSP432 在 Energia 上的使用(下) 发现 使用方法 TASK1 TASK2 TASK3 发现 事实证明多看官网还是有好处的,之前我在使用 Energia 对 MSP430 进行编程时一直非常疑惑,为什么 TI 公司不直接使用 Arduino 已有的 IDE 而非要做个自己的 Energia 导致不为人知非常冷门,但是官网上的介绍回答了我这一点。打开Energia 官网,进入 Guide 界面,翻阅一下可以看见一个名词——MultiTasking,即多任务。众所周知如果单片机想要实现多任务并行,一般需要自己搭建 RTOS 或者更复杂一点进行专门的时分复用设计,这些方法往往需要较丰富的知识才能实现。而 Energia 就可以非常简单地(其实如果进行一些复杂操作也是挺复杂的)实现多任务操作。而官网在这里其实也给出了关于 Multitasking 的介绍,值得注意的是目前该功能只能作用与 MSP432,MSP432E,CC3320 和 CC1310几种芯片,这也是为什么我把这一章名字改成了 MSP432 而不是 MSP430。(说起来每次打开 Energia 它的启动显示里面也写到了 Energia MT,实际上就是说的这个功能,不过我一直没咋注意) 使用方法 其实官网原文就有一个大概介绍了,我这里就重复一下。关于 MultiTasking(以下简称 MT)的使用其实非常简单(如果不想做太复杂的话)。 每次新建工程后,我们会有一个初始界面,上面写的 void setup()和 void loop()(其实就是正常 Energia 或 Arduino IDE 在新建后的工程界面),我们可以把这个界面称之为工程主界面。如果只使用工程主界面写一个程序,那么它只是普通的单线程程序,但是如果你使用的是 MSP432 这类单片机,你可以点击 IDE 右上角的倒三角符号,新建一个 task,随便输入一个名字作为新任务(Task)的名字(注意不要输入后缀,IDE 会自动将其生成为 ino)然后你可以在里面写两个函数,他们便可以当成一个新的 setup 和 loop 函数了,此时如果烧录进芯片后,芯片便会同时运行两个任务(实际上并不是同时运行,只是通过快速转换两个任务的运行最后看上去是同时运行)。 ...

November 7, 2020 · 云雾海

MSP430在Energia上的使用(上)

MSP430 在 Energia 上的使用(上) 说实话我也不确定会不会有后面的笔记,但是这次实验的确相当于没有做完。 MSP430 在 Energia 上的使用(上) 准备工作 问题意义 实验一:测试传输接口 实验现象: 实验结论: 实验二:移植到 ArduinoIDE 备注 准备工作 终于狠下心花了百元大洋买了块 MSP430F5529LP 板子,准备研究一下板载仿真器在 Energia 中是如何进行烧录的。 通过 TI 公司的官方文件《MSP430F5529 LaunchPad Development Kit……》,我们其实可以得到 LaunchPad 的原理图,因为整个原理图用了四页,这里就不详细展示了,有需要可以在 TI 官网找。我只截取板载仿真器和 MSP430F5529 芯片的接口部分的图 其中板载仿真器被 TI 公司命名为 ezFET,应该是简版仿真器的意思,除去电源线部分,我们可以看到信息传输分为两部分——SBW 和 UART。其中 SBW 相当于两线 JTAG,可以当做仿真器接口,而 UART 则是使用的 MSP430 的 BSL 接口,其只能作为烧录口。 那么看到这其实问题就很简单了,我们需要确定 Energia 在烧录的时候具体是用的哪个接口。 问题意义 一般情况下,我们在使用 LaunchPad 时,是不需要管这个仿真器是如何工作的,但是如果当我们手里只有一块没有板载仿真器的开发板或者甚至只有一块芯片的时候,我们又该如何对其使用 Energia 呢,是应该用 JTAG 连接吗,还是使用 SBW,亦或是使用 BSL?我们是否能将 EnergiaIDE 的移植到 ArduinoIDE 上呢(因为 Energia 事实上能够使用的资源远远不及 Arduino,而且无法用 VSCode 这个大杀器)? ...

August 26, 2020 · 云雾海

Arduino通过USB转TTL无BootLoader(引导程序)烧录程序的两种办法

Arduino 通过 USB 转 TTL 无 BootLoader(引导程序)烧录程序的两种办法 Arduino 通过 USB 转 TTL 无 BootLoader(引导程序)烧录程序的两种办法 注意 于 BootLoader 的废话 通过 ArduinoIDE 的 Serial 模式烧录 通过二进制文件烧录 总结 注意 (这个实验室基于 stm32duino 的,avr 单片机并不直接通用,不过如果你准备尝试使用串口来给 avr 单片机(就是 Arduino 官方出的几款 Arduino)烧录 Arduino 的 BootLoader,建议直接放弃因为 avr 单片机并不支持直接使用串口上传程序,而且 Arduino 的 BootLoader 好像目的也就是让 Arduino 能够直接串口烧录程序。 也就是说你不能在没有 BootLoader 的情况下烧录 avr-Arduino 的 BootLoader,而当你可以用串口给 avr-Arduino 烧录 BootLoader 时就说明你已经有 BootLoader 了,可以不用再烧录一次了) 于 BootLoader 的废话 因为准备参加电赛,想着如果比赛可以用 Arduino 或许会方便很多,所以准备研究一下 Arduino 的底层程序,学习一下如何把随便一块芯片都能做成 Arduino 来开发。不过这篇帖子和此并没有太大关系,只是属于机缘巧合做的一个小实验而已,对于已知 BootLoader 的原理或者想自己写 BootLoader 的朋友并无太大帮助。 ...

August 9, 2020 · 云雾海