高阶程序猿的 Geek 之道: Arduino 之旅

2,349 阅读6分钟

Why Arduino

我是一名“地地道道”的软件工程师,为什么这么说呢,很大一部分原因是因为我的硬件知识几乎为零,换别人一句别人的建议:"你还是专心搞软件吧,OK?"。我过去的所有经验都是上层应用软件的编码开发,不过从我个人的内心来讲,其实我对硬件也一直抱有着很大的兴趣。所以,我一直不断,不断想去尝试做一些硬件相关的研究。但是,硬件知识始终欠缺太多,想要搞一些硬件开发,原谅臣,实在做不到阿。但是很幸运的是,我碰到了树莓派,还有今天最大的主角:Arduino。(想吐嘈一下,说真的,可能到现在我对这个单词还不是念得很好,这是一个意大利的单词,应该是一个人名意思,没有具体中文意思)

Arduino不需要你有太多的硬件相关知识,你只需要知道一些特定,特别基础的电路知识,这些应该在国内的高中应该都学过的。更多的是,发挥你自己的创意,特别是软件层面的一些思想。Arduino的软件层面开发上面还封装了一些高层函数,你可以轻易地去控制硬件的相关内容。所以,Arduino让我们把精力放在了创意和实现上,而不是复杂而非必要性的底层物理硬件知识。

近期,从万能的宝宝网站上购买了Arduino的这个硬件,这个硬件其实很简单,主要有三个部分:数字接口的输入输出,串口通讯接口,模拟通讯接口。有了这三个部分,我们就能够用它来控制绝大部分的硬件和相关传感器,包括什么LED灯,开关,超声波探头,温度传感器,红外线传感器,巴拉巴拉之类的东西,当然啦,最让人兴奋的是你可以不断发挥你的创意,去破解和对接一些市面上的一些商业硬件,包括XBOX、Wii游戏手柄,HHKB键盘。当然,有时候甚至可以将Arduino作为一个附属模块,配合一些相对高层次的硬件,如和数莓派配合.当然更有意思的是,你甚至可以用他来做一款智能小车,或者比较让人兴奋的无人机:

Arduino DIY无人机 视频地址

所以,假如上帝给你一块Ardiuno,你应该用他来撬动你自己内心的小宇宙。

Arduino的开发流程

讲述一些基础的安装教学,大家去看官方介绍就好了,网上也有一大堆的教程,可谓资源丰富且海量,不过这里建议(包括给我自己),学习Arduino,最好多钻钻牛角尖,看看教程,COPY一些别人的代码,烧录到Arduino上面去,然后就认为自己学会了,这是一种很LOW,且意义不太大的学习方式。我个人建议,DEMO代码应该是仅仅是参考,关键还是自己亲手去实现自己设想的逻辑,才是最好的,当然,天才们可以跳过我说的这几句废话。

回到正题,正常来说,Arduino的开发流程一般分为几个阶段:

  1. 创意目标设计
  2. 电路及逻辑设计
  3. 环境搭建
  4. 软件编码实现
  5. 烧录并验证测试

举一个简单例子:

1.创意目标设计

由于手头上刚好有两个LED灯,分别为红色和蓝色,反正闲着没事,那就让他交替闪烁一下呗。

2.电路及逻辑设计

没啥好设计的,就是把他们分别连接到分别连接Arduino两个引脚上,为了防止电流过大,保护我这LED灯,减少财产损失,我给其中一个加了一个电阻,另外一个连接到自带电阻的引脚上了。为了体现我装逼的专业感,我特意用一款比较简易NB的电路设计软件:fritzing,给大家设计如下电路连接示意图结构:
对应原理图:

现在是要对应的PIN脚输出不同的电平,输出模式(高电平)就亮,输入模式就暗,分别控制用来亮暗,为了体现程序猿的水平,我又给大家画了一个简单的软件执行流程图:

3.环境搭建

按照示意图,原理图,把他们实际连接起来。

4.软件编码实现

Arduino提供了一个非常方便开发者的集成环境:Arduino IDE,有了他,妈妈再也不用担心我们不会编码烧录程序了。

在这一环节,软件编码者的优越感,油然而生。三下五除二,啪啪几声,我们按照流程图实现逻辑如下,感谢Arduino设计,只需要知道setup()方法是启动设置(启动只执行一次),把所有相关的配置写在该方法中。loop()方法是循环方法,在Arduino启动的状态中,会一直循环执行loop中的逻辑。digitalWrite是控制数字引脚的方法,所以最后代码说话:


//13号引脚连接着蓝色LED灯
const int LED_PIN_BLUE = 13;
//12号引脚连接着红色LED灯
const int LED_PIN_RED=12;
//延迟时间为1000毫秒
const int DELAY_TIME_MS = 1000;

void setup() {

}

void loop() {
  //输出模式,蓝色LED灯亮
  digitalWrite(LED_PIN_BLUE, OUTPUT);
  //输入模式,红色LED灯暗
  digitalWrite(LED_PIN_RED, INPUT);
  //让灯保持现状蓝灯亮,红灯暗1000毫秒
  delay(DELAY_TIME_MS);
  //输入模式,蓝色LED灯暗
  digitalWrite(LED_PIN_BLUE, INPUT);
  //输出模式,红色LED灯亮
  digitalWrite(LED_PIN_RED, OUTPUT);
  //让灯保持现状蓝灯暗,红灯亮1000毫秒
  delay(DELAY_TIME_MS);


  //继续循环该方法
}

编写完毕,可以编译验证一下看代码是否正确,如果IDE没有抛出错误,恭喜你,我们可以将自己的代码烧录到Arduino实际验证了。

5. 烧录并验证测试

在Arduino IDE选择:工具->串口,选择你需要烧录的arduino连接的串口。配置一下目标硬件平台:工具->开发板,选择你自己的硬件平台。最后,烧录上传到arduino上,烧录完毕后,我们就可以看到效果了:

(选择Linux版IDE的用户,从官网下载后,最好以sudo权限启动:sudo ./arduino,才有权限使用串口通讯并烧录。)

Arduino进阶之路

(作者很懒,待续。。。。)