简单物联网到这时,我们算搭建了一个简单的REST服务了。接着我们可以简单的做一个最小的物联网系统,将我们的单片机、MCU等等连上网。
考虑到如果我们只是单一连接各个节点,那么系统的结构图,同下所示
下面的星形结构图类似于我们在接下来所要构建的系统
一个用于控制真实电器的硬件实物图
硬件通信串口通信Arduino与Raspberry Pi通过串口通信的方式实现通信,相互传输所需要的数据,Raspberry Pi将资源传于互联网上对应的接口,接口可以在互联网上被访问。Laravel框架构架于服务器之上,将Raspbery Pi获取过来的数据存储于MySQL数据,再以REST服务的方式共享数据,互联网上的其他设备便可以通过网络来访问这些设备。Ajax用于将后台的数据以不需要刷新的方式传递到网站前台,通过HighCharts框架显示给终端用户。 Python1.在Windows中的串口通常是 ser=serial.Serial('COM0',9600)
2.Mac OS系统中位于/dev目录下,名字类似于 serial.Serial('/dev/tty.usbmodem1451',9600)
3.在Linux内核的系统中虚拟串口用的节点是ttyACM,位于/dev目录下。 serial.Serial('/dev/ttyACM0',9600)
便是打开这个设备,以9600的速率传输数据。 程序框架如下所示:
代码如下: import json
import urllib2
import serial
import time
url='http://www./athome/1'
while 1:
try:
date=urllib2.urlopen(url)
result=json.load(date)
status=result[0]['led1']
ser=serial.Serial('/dev/ttyACM0',9600)
if status==1 :
ser.write('1')
elif status==0:
ser.write('0')
time.sleep(1)
except urllib2.URLError:
print 'Bad URL or timeout'
系统还需要对上面的数据进行处理,只拿其中的结果
当改变led的状态后,便可以得到下面的结果
Ruby如果你用的是Ruby的话,可以尝试使用 安装 sudo gem install serialport
代码大致如下 require 'serialport'
sp = SerialPort.new '/dev/ACM0', 9600
sp.write '1'
注意: 根据相关的系统修改相关的代码。 硬件Arduino这样我们在我们的Arduino上所要做的便是,读取串口的结果并控制IO口。 int ledPort=13;
void setup() {
Serial.begin(9600);
pinMode(ledPort,OUTPUT);
}
int serialData;
void loop() {
String inString = '';
while (Serial.available()> 0)
{
int inChar = Serial.read();
if (isDigit(inChar)) {
inString = (char)inChar;
}
serialData=inString.toInt();
Serial.print(serialData);
}
if(serialData==1){
digitalWrite(ledPort,HIGH);
}else{
digitalWrite(ledPort,LOW);
}
}
如果结果是1的话,就让13口为高电平,也就是让灯亮起来。 继电器
在这里我们可以默认为我们想要为单片机的5V电压控制220V的电器。 最后我们便可以通过些来控制灯的开和关。 |
|