我对[url=http://arduino.cc]Arduino[/url]一直很有兴趣,它简单容易上手,不折腾实在对不起我大学的电子工程专业(虽然专业课程都60分,补考什么的...),最近终于有空可以开始写系列博客,记录我的折腾之路。
什么是arduino,已经有很多文章了:
[quote="arduino.cc"]
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(arduino的各种电路板)和软件(arduino IDE)。它能够和环境以及各种硬件进行互动。[/quote]
如何安装驱动,如何写第一个程序,网络上也有很多文章了,不过大部分中文资料都是基于windows的,其实在Linux下安装更加简单,各个发行版的包管理都有带,以Ubuntu 12.04为例子,只要运行:
会将各种依赖和驱动安装好,然后运行arduino命令就能够打开IDE。
arduino板和电脑之间用的是串口通讯,但是现在电脑几乎都没有串口了,通常都是用USB转串口。在Linux下安装好驱动,接上arduino板以后,对应的tty设备就是/dev/ttyUSB0(如果有多个的话,就是1..N)。
arduino的基础指令很少,控制结构和其他语言类似,所以非常容易上手,以最常见的[url=http://arduino.cc/en/Tutorial/Blink]闪烁一个LED[/url]灯为例子,将一个LED灯和一个220欧姆电阻(防止LED过载烧掉,1个LED几分钱,烧掉一个很心痛的 :cry: )接到编号为13的口和地口上:
[img]http://arduino.cc/en/uploads/Tutorial/ExampleCircuit_bb.png[/img]
然后在IDE里面输入如下的代码,通过IDE的upload指令,将代码烧入板子:
所有在板子上运行的代码无论简单还是复杂,都是由2个函数setup和loop构成。顾名思义setup只在启动时运行一次,在上面的代码我们设置了13口为输出。而loop会不停地循环执行,在上面的代码里面是往13口输出一个高电平信号,然后延迟1秒,再输出一个低电平信号,再延迟1秒,这样就实现了LED灯亮1秒,暗一秒的闪烁效果。
其实arduino本身的代码简单易学,连我刚上小学的儿子也能读懂。要做一个好的arduino作品,更多的时候靠的是创意而不是编程和电路(人工智能啥的除外 。。。)但是作为不折腾不舒服司机和ruby控的我,更希望能够用ruby来写。
[url=http://rad.rubyforge.org/]RAD[/url]是我找到的第一个开源的ruby控制arduino方案,它定义了一系列的dsl,然后通过ruby2c,将代码转换上传到板子,我们来看一下对应上面的闪烁代码:
这个代码比之前更加容易懂,而且还添加了blink这样的dsl,看起来很美,但是实际使用下来问题很多。
首先它只支持ruby 1.8,然后开发已经停滞,它的原理又是通过代码转换来实现的,每次调试代码必须通过编译上传来进行,arduino如果升级或者有新的函数(比如第3方库),它也不支持。
现在比较常见的方法是,将代码放在PC端运行,通过串口通讯写入和读取arduino上的各种输入输出口,这样的好处有2个:1复杂的控制代码(比如互联网,计算,数据库)可以不受限于arduino语言。 2方便快速调试,不需要编写,上传,烧入这样麻烦。
ruby和串口通讯有[url=http://ruby-serialport.rubyforge.org/]serialport[/url]这个gem,具体如何使用,请等待下篇...
什么是arduino,已经有很多文章了:
[quote="arduino.cc"]
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(arduino的各种电路板)和软件(arduino IDE)。它能够和环境以及各种硬件进行互动。[/quote]
如何安装驱动,如何写第一个程序,网络上也有很多文章了,不过大部分中文资料都是基于windows的,其实在Linux下安装更加简单,各个发行版的包管理都有带,以Ubuntu 12.04为例子,只要运行:
apt-get install arduino
会将各种依赖和驱动安装好,然后运行arduino命令就能够打开IDE。
arduino板和电脑之间用的是串口通讯,但是现在电脑几乎都没有串口了,通常都是用USB转串口。在Linux下安装好驱动,接上arduino板以后,对应的tty设备就是/dev/ttyUSB0(如果有多个的话,就是1..N)。
arduino的基础指令很少,控制结构和其他语言类似,所以非常容易上手,以最常见的[url=http://arduino.cc/en/Tutorial/Blink]闪烁一个LED[/url]灯为例子,将一个LED灯和一个220欧姆电阻(防止LED过载烧掉,1个LED几分钱,烧掉一个很心痛的 :cry: )接到编号为13的口和地口上:
[img]http://arduino.cc/en/uploads/Tutorial/ExampleCircuit_bb.png[/img]
然后在IDE里面输入如下的代码,通过IDE的upload指令,将代码烧入板子:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
所有在板子上运行的代码无论简单还是复杂,都是由2个函数setup和loop构成。顾名思义setup只在启动时运行一次,在上面的代码我们设置了13口为输出。而loop会不停地循环执行,在上面的代码里面是往13口输出一个高电平信号,然后延迟1秒,再输出一个低电平信号,再延迟1秒,这样就实现了LED灯亮1秒,暗一秒的闪烁效果。
其实arduino本身的代码简单易学,连我刚上小学的儿子也能读懂。要做一个好的arduino作品,更多的时候靠的是创意而不是编程和电路(人工智能啥的除外 。。。)但是作为不折腾不舒服司机和ruby控的我,更希望能够用ruby来写。
[url=http://rad.rubyforge.org/]RAD[/url]是我找到的第一个开源的ruby控制arduino方案,它定义了一系列的dsl,然后通过ruby2c,将代码转换上传到板子,我们来看一下对应上面的闪烁代码:
class MySketch < ArduinoSketch
output_pin 13, :as => :led
def loop
blink led, 1000
end
end
这个代码比之前更加容易懂,而且还添加了blink这样的dsl,看起来很美,但是实际使用下来问题很多。
首先它只支持ruby 1.8,然后开发已经停滞,它的原理又是通过代码转换来实现的,每次调试代码必须通过编译上传来进行,arduino如果升级或者有新的函数(比如第3方库),它也不支持。
现在比较常见的方法是,将代码放在PC端运行,通过串口通讯写入和读取arduino上的各种输入输出口,这样的好处有2个:1复杂的控制代码(比如互联网,计算,数据库)可以不受限于arduino语言。 2方便快速调试,不需要编写,上传,烧入这样麻烦。
ruby和串口通讯有[url=http://ruby-serialport.rubyforge.org/]serialport[/url]这个gem,具体如何使用,请等待下篇...