物联网时代到来,以Arduino为代表的开源硬件给小学生和我们软件工程师深入硬件开发提供了绝佳的机会。开源硬件是什么意思呢,就是一个单片机或者电路板模块,它的电路设计图是开源的,任何人都可以获取,修改,还可以自己PCB打样弄出自己的硬件产品来。源自意大利的Arduino就是这样一个非常友好的开源硬件平台,所有为Arduino开发硬件模块的企业或个人,都会提供相应的驱动。这种把硬件驱动封装成库供开发者调用的方式成了物联网时代快速开发的新模式,今天我就要来尝试一下这个模式。
第一次使用Arduino,选了一个比较简单的例子——用HC-05蓝牙模块+Arduino pro mini+0.96寸的1306OLED,加上示例代码,造一个简单的蓝牙手表,手机能给其发送信息进行同步。
首先要调通的就是OLED模块,这是一个显示屏,使用4Pin的IIC接口,VCC接ArduinoUno上的3.3V接口(5V也是可以的),GND就接GND,SCL口和SDA口按照Arduino的一般分配方式,分别接到板子上的A5和A4口,接好后是这样的:
我们可以自己用C写驱动去驱动这个显示屏显示各种图案,但现在手写个驱动能力还达不到,于是用了U8glib库,这个显示屏驱动库在github上很容易找到,将U8glib构造函数设置为:
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
这是我的0.96寸OLED屏对应的型号。 调节这个OLED时遇到了一些麻烦,按这个设置点不亮屏幕,更改U8glib构造函数甚至是更换了其它的一些库也没有点亮。于是去搜索这个屏的一些资料,发现可能是IIC地址错误造成的,于是从官方论坛上下了一个扫描IIC地址的代码: http://playground.arduino.cc/Main/I2cScanner
扫描的结果是IIC地址时有时无,这样一来问题很清晰了,居然是接触不良导致的!于是用排针焊了一下接口,再用U8glib跑一遍,可以完好无误的显示了。下面是加上了一个中文字库的效果图:
值得一提的是,用IIC接口地址扫描程序如果无论如何都扫不到地址,有可能是OLED的IIC没有应答功能导致单片机扫不到,这时候就要用U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);
来进行构造才能显示。经过测试,我这款屏的IIC带应答功能,用U8G_I2C_OPT_NO_ACK和U8G_I2C_OPT_NONE构造都可以正常显示。
显示屏测试好了,就把它从ArduinoUno板子上拔下来插到Arduino pro mini上,各针脚接法是完全一样的,代码也不需要改。这样用起来还是很方便很简单的。
接下来就连接蓝牙模块,虽然HC-05模块有六个针脚,但这个示例只需要连四针,RXD和TXD分别接Arduino pro mini上的3和2口。VCC和GND这回接到外接电源上了,因为mini板子上的电源口不够用,手头暂时也没有分线的东西或者合适的电阻。
接好之后直接刷进示例代码,可以看到时钟界面已经能够显示了,这时候用手机连上,就能同步时间到表,还可以给表发消息,十分excited!下面上一张完整的接线图: