看到已经有其他组有了这个东西,于是便动手做了一个,做起来也挺简单的~~
基本原理
因为暂时没有RPI,于是就用Arduino+Mac Mini动手做了一个,原理上就是
- 用Python获取Bamboo的状态
- 用Python的串口通讯将构建状态发送给Arduino
- Arduino显示这些状态
获取状态
官方上提供的API,大致就是获取这个URL的XML
http://bamboo.example.com/rest/api/latest/result/PROJECT_NAME
接着用Python解析,获取其中的状态,发送给Arduino。于是就有了
import requests
import xml.etree.cElementTree as ET
import serial
import time
url = 'http://bamboo.example.com/rest/api/latest/result/PROJECT_NAME'
s = serial.Serial(port='/dev/tty.usbmodem1451', baudrate=9600)
while(True):
lastest = requests.get(url)
if lastest.status_code == 200:
root = ET.fromstring(lastest.text)
print root.attrib["state"]
if str(root.attrib["state"]) == "Successful":
s.write('S')
elif str(root.attrib["state"]) == "Fail":
s.write('F')
else:
s.write('U')
time.sleep(60)
当state是成功的时候,发送一个S,失败的时候发送一个F,其他状态就是闪烁。
显示状态
同样对就于上面的代码,也就有了Arduino的代码。当收到的字符是F的时候,便让灯灭,如果是S的时候,便点亮LED,如果是未知的状态,便闪烁。
int led = 13;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
String content = "";
char character;
while(Serial.available()) {
character = Serial.read();
content.concat(character);
}
Serial.println(content);
if (content != "") {
if(content == "U"){
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}else if(content == "S"){
digitalWrite(led, HIGH);
delay(1000);
}else if( content == "F"){
digitalWrite(led, LOW);
delay(1000);
}
}
}
最后的代码可见https://github.com/gmszone/bamboo_py
其他
Python的依赖库有
- requests
- lxml
- pyserial
如果clone下了代码可以用
sudo pip install -r requirements.txt
安装依赖。
或许您还需要下面的文章: