ConfigObj Library 可以幫您很容易存取 .ini 檔。
官網 https://pypi.python.org/pypi/configobj
下載
切換網頁到 https://pypi.python.org/pypi/configobj/5.0.6,點擊「Download」綠色按鈕。
安裝
解壓縮 configobj-5.0.6.tar.gz,開啟「命令提示字元」視窗,鍵入
cd \configobj-5.0.6
再鍵入
python setup.py install
參考網站
http://www.voidspace.org.uk/python/configobj.html#configobj-in-the-real-world
2014年9月22日 星期一
2014年9月19日 星期五
安裝 kivy - python for android
從現在起,您可以在 KIVY 架構下使用 Python 語言建立 Android App 了。
官網 http://kivy.org/#home
下載
https://github.com/kivy/python-for-android
教學影片
https://www.youtube.com/watch?v=F7UKmK9eQLY
官網 http://kivy.org/#home
下載
https://github.com/kivy/python-for-android
教學影片
https://www.youtube.com/watch?v=F7UKmK9eQLY
2014年9月14日 星期日
將 Youtube 影片轉成音樂檔
步驟如下:
1. 先找到 youtube 影片。
2. 複製該影片的網址。
3. 切換網頁到 http://www.youtube-mp3.org/。
4. 將影片網址貼到這兒。
5. 點擊「Convert Video」按鈕。
經過一會兒會出現類似下列畫面
6. 點擊藍色的「Download」按鈕。
1. 先找到 youtube 影片。
2. 複製該影片的網址。
3. 切換網頁到 http://www.youtube-mp3.org/。
4. 將影片網址貼到這兒。
經過一會兒會出現類似下列畫面
6. 點擊藍色的「Download」按鈕。
2014年9月13日 星期六
安裝 wxGlade
wxGlade 是一個利用 wxPython 工具箱製作而成的使用者圖形介面建構器。目前,它也可以產生 Python、C + +、Perl、Lisp 和 XRC(wxWidgets的“XML資源)的使用者圖形介面代碼。
官網 http://wxglade.sourceforge.net/
下載
切換網頁到 http://sourceforge.net/projects/wxglade/,點擊螢幕中央的「Download」綠色按鈕。
安裝
雙擊 wxGlade-SAE-0.6.8-setup.exe,然後依照視窗指示進行即可。
教學
官網 http://wxglade.sourceforge.net/tutorial.php
程式語言教學誌 http://pydoing.blogspot.tw/2009/01/docsdemowxglade.html
官網 http://wxglade.sourceforge.net/
下載
切換網頁到 http://sourceforge.net/projects/wxglade/,點擊螢幕中央的「Download」綠色按鈕。
安裝
雙擊 wxGlade-SAE-0.6.8-setup.exe,然後依照視窗指示進行即可。
教學
官網 http://wxglade.sourceforge.net/tutorial.php
程式語言教學誌 http://pydoing.blogspot.tw/2009/01/docsdemowxglade.html
2014年9月12日 星期五
Wyliodrin
Wyliodrin - 視覺化的樹莓派整合發展環境
官網 https://www.wyliodrin.com/
教學影片
官網 https://www.wyliodrin.com/
教學影片
Program Raspberry Pi Lesson 1: Switch a LED on and off by using a web browser
https://www.youtube.com/watch?v=YWLwUdkdWVEProgram Raspberry Pi Lesson 2: Show the likes from a Facebook page on two 7-segment displays
https://www.youtube.com/watch?v=qLnDilQtAzMProgram Raspberry Pi Lesson 3: Display sensor values on graphs.
https://www.youtube.com/watch?v=1K97q-Md7sAProgram Intel Galileo Gen 2 Lesson 4: Show sensors' value
https://www.youtube.com/watch?v=PapUdght_po&list=UUDe4G1RXRYsOEJzXHixutRAProgram Intel Galileo Gen 2 Lesson 5: Turn on/off the light with a relay and a light sensor
https://www.youtube.com/watch?v=PziZTtdeH5k&list=UUDe4G1RXRYsOEJzXHixutRA安裝 Win32 Extensions
Win32 Extensions 提供一些讓您存取 Windows 作業系統的功能,例如讀取磁碟機資訊...等。
官網 http://starship.python.net/crew/mhammond/
下載
切換網頁到 http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/,點擊 pywin32-219.win32-py3.5.exe 。
安裝
雙擊 pywin32-219.win32-py3.5.exe ,然後依照視窗內的指示安裝即可。
官網 http://starship.python.net/crew/mhammond/
下載
切換網頁到 http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/,點擊 pywin32-219.win32-py3.5.exe 。
安裝
雙擊 pywin32-219.win32-py3.5.exe ,然後依照視窗內的指示安裝即可。
2014年9月9日 星期二
安裝 PyKE
PyKE(Python Knowledge Engine) 是一個知識引擎套件,無論是正向鏈接或反向鏈規則(包括Python代碼)都可以被編譯成 Python,還可以自動組合成 Python 函數以外的程式,並且附加到反向鏈規則之中。
官網 http://pyke.sourceforge.net/
下載
切換網頁到 http://sourceforge.net/projects/pyke/?source=typ_redirect,點擊螢幕中央的「Download」綠色按鈕。
安裝
將 pyke-1.1.1.zip 解壓縮,開啟「命令列提示視窗」,鍵入 python setup.py install。
官網 http://pyke.sourceforge.net/
下載
切換網頁到 http://sourceforge.net/projects/pyke/?source=typ_redirect,點擊螢幕中央的「Download」綠色按鈕。
安裝
將 pyke-1.1.1.zip 解壓縮,開啟「命令列提示視窗」,鍵入 python setup.py install。
2014年9月4日 星期四
安裝 Visual Tkinter Python IDE
這是一個視覺化的整合操作環境,您可以用它來建立圖形化的使用者介面。
下載
切換至網頁 http://sourceforge.net/projects/visualtkinter/,點擊畫面中央的「Download」綠色按鈕。
安裝
解壓縮 Visual Python 2v0.12.2554.zip,雙擊 setup.exe,然後依照視窗指示進行即可。
安裝完成後會在桌面產生一個捷徑圖示,如下圖:
雙擊捷徑您就可以看到 Visual Tkinter 的整合介面,如下圖:
下載
切換至網頁 http://sourceforge.net/projects/visualtkinter/,點擊畫面中央的「Download」綠色按鈕。
安裝
解壓縮 Visual Python 2v0.12.2554.zip,雙擊 setup.exe,然後依照視窗指示進行即可。
安裝完成後會在桌面產生一個捷徑圖示,如下圖:
安裝 PythonCard
PythonCard 是一個以 wxPython 為基礎的使用者介面建構器。
官網 http://pythoncard.sourceforge.net/index.html
下載
切換網頁至 http://sourceforge.net/projects/pythoncard/files/,然後點擊淡藍色的 Download PythonCard-0.8.2.win32.exe (3.5 MB) 字樣。
安裝
快擊兩下 PythonCard-0.8.2.win32.exe,然後依照視窗指示安裝即可。
檢查是否已正確安裝
開啟範例檔案 <Python>\Lib\site-packages\PythonCard\samples\minimal\minimal.py 並執行它,如果有看到如下視窗表示已正確安裝。
查看所有的視窗工具
開啟範例檔案 <Python>\Lib\site-packages\PythonCard\samples\widgets\widgets.py 並執行它,您將可以看到如下視窗。
或是您也可以到這兒逐一檢視視窗工具有哪些:
http://pythoncard.sourceforge.net/samples/addresses.html
官網 http://pythoncard.sourceforge.net/index.html
下載
切換網頁至 http://sourceforge.net/projects/pythoncard/files/,然後點擊淡藍色的 Download PythonCard-0.8.2.win32.exe (3.5 MB) 字樣。
安裝
快擊兩下 PythonCard-0.8.2.win32.exe,然後依照視窗指示安裝即可。
檢查是否已正確安裝
開啟範例檔案 <Python>\Lib\site-packages\PythonCard\samples\minimal\minimal.py 並執行它,如果有看到如下視窗表示已正確安裝。
查看所有的視窗工具
開啟範例檔案 <Python>\Lib\site-packages\PythonCard\samples\widgets\widgets.py 並執行它,您將可以看到如下視窗。
http://pythoncard.sourceforge.net/samples/addresses.html
2014年9月2日 星期二
註解
註解是不會被執行的,為代碼加註說明是一件好的習慣,這些註解能夠讓您的程式更容易閱讀和維護。
單行註解
假設您有如下之代碼:
a = 5
b = 2
c = a + b
print c
您想把 c = a + b 這一行改成 c = a - b,但又不想把 c = a + b 這一行刪除掉,則您可以在該行前面加一個「 #」字元,如下:
a = 5
b = 2
#c = a + b
c = a - b
print c
註解區塊
假設您有如下之代碼:
a = 5
b = 2
print a + b
print a - b
print a * b
print a / b
而您想把一整個區塊的代碼做註解,則您可以在該區塊首尾各加一個「'''」字元,如下:
a = 5
b = 2
'''
print a + b
print a - b
print a * b
'''
print a / b
單行註解
假設您有如下之代碼:
a = 5
b = 2
c = a + b
print c
您想把 c = a + b 這一行改成 c = a - b,但又不想把 c = a + b 這一行刪除掉,則您可以在該行前面加一個「 #」字元,如下:
a = 5
b = 2
#c = a + b
c = a - b
print c
註解區塊
假設您有如下之代碼:
a = 5
b = 2
print a + b
print a - b
print a * b
print a / b
而您想把一整個區塊的代碼做註解,則您可以在該區塊首尾各加一個「'''」字元,如下:
a = 5
b = 2
'''
print a + b
print a - b
print a * b
'''
print a / b
2014年9月1日 星期一
Python-Arduino-Command-API
Python-Arduino-Command-API 提供您另外一種方式讓 Python 與 Arduino 通訊。
下載
切換網頁到 https://github.com/thearn/Python-Arduino-Command-API,點擊右下角落的 Download ZIP 按鈕。
安裝
下載後解壓縮,然後開啟「命令提示字元」視窗,切換到你解壓縮後的路徑,鍵入
python setup.py build install
範例
讓 Arduino 的 pin13 LED 閃爍。
Python Code
#!/usr/bin/env python
"""
Blinks an LED on digital pin 13
in 1 second intervals
"""
from Arduino import Arduino
import time
board = Arduino('9600') #plugged in via USB, serial com at rate 9600
while True:
board.digitalWrite(13, "LOW")
time.sleep(1)
board.digitalWrite(13, "HIGH")
time.sleep(1)
Arduino Code
下載
切換網頁到 https://github.com/thearn/Python-Arduino-Command-API,點擊右下角落的 Download ZIP 按鈕。
安裝
下載後解壓縮,然後開啟「命令提示字元」視窗,切換到你解壓縮後的路徑,鍵入
python setup.py build install
範例
讓 Arduino 的 pin13 LED 閃爍。
Python Code
#!/usr/bin/env python
"""
Blinks an LED on digital pin 13
in 1 second intervals
"""
from Arduino import Arduino
import time
board = Arduino('9600') #plugged in via USB, serial com at rate 9600
while True:
board.digitalWrite(13, "LOW")
time.sleep(1)
board.digitalWrite(13, "HIGH")
time.sleep(1)
Arduino Code
#include <SoftwareSerial.h>
#include <Wire.h>
#include <Servo.h>
#include <EEPROM.h>
SoftwareSerial *sserial = NULL;
Servo servos[8];
int servo_pins[] = {0, 0, 0, 0, 0, 0, 0, 0};
boolean connected = false;
int Str2int (String Str_value)
{
char buffer[10]; //max length is three units
Str_value.toCharArray(buffer, 10);
int int_value = atoi(buffer);
return int_value;
}
void split(String results[], int len, String input, char spChar) {
String temp = input;
for (int i=0; i<len; i++) {
int idx = temp.indexOf(spChar);
results[i] = temp.substring(0,idx);
temp = temp.substring(idx+1);
}
}
void Version(){
Serial.println("version");
}
uint8_t readCapacitivePin(String data) {
int pinToMeasure = Str2int(data);
// readCapacitivePin
// Input: Arduino pin number
// Output: A number, from 0 to 17 expressing
// how much capacitance is on the pin
// When you touch the pin, or whatever you have
// attached to it, the number will get higher
// http://playground.arduino.cc/Code/CapacitiveSensor
//
// Variables used to translate from Arduino to AVR pin naming
volatile uint8_t* port;
volatile uint8_t* ddr;
volatile uint8_t* pin;
// Here we translate the input pin number from
// Arduino pin number to the AVR PORT, PIN, DDR,
// and which bit of those registers we care about.
byte bitmask;
port = portOutputRegister(digitalPinToPort(pinToMeasure));
ddr = portModeRegister(digitalPinToPort(pinToMeasure));
bitmask = digitalPinToBitMask(pinToMeasure);
pin = portInputRegister(digitalPinToPort(pinToMeasure));
// Discharge the pin first by setting it low and output
*port &= ~(bitmask);
*ddr |= bitmask;
delay(1);
// Make the pin an input with the internal pull-up on
*ddr &= ~(bitmask);
*port |= bitmask;
// Now see how long the pin to get pulled up. This manual unrolling of the loop
// decreases the number of hardware cycles between each read of the pin,
// thus increasing sensitivity.
uint8_t cycles = 17;
if (*pin & bitmask) { cycles = 0;}
else if (*pin & bitmask) { cycles = 1;}
else if (*pin & bitmask) { cycles = 2;}
else if (*pin & bitmask) { cycles = 3;}
else if (*pin & bitmask) { cycles = 4;}
else if (*pin & bitmask) { cycles = 5;}
else if (*pin & bitmask) { cycles = 6;}
else if (*pin & bitmask) { cycles = 7;}
else if (*pin & bitmask) { cycles = 8;}
else if (*pin & bitmask) { cycles = 9;}
else if (*pin & bitmask) { cycles = 10;}
else if (*pin & bitmask) { cycles = 11;}
else if (*pin & bitmask) { cycles = 12;}
else if (*pin & bitmask) { cycles = 13;}
else if (*pin & bitmask) { cycles = 14;}
else if (*pin & bitmask) { cycles = 15;}
else if (*pin & bitmask) { cycles = 16;}
// Discharge the pin again by setting it low and output
// It's important to leave the pins low if you want to
// be able to touch more than 1 sensor at a time - if
// the sensor is left pulled high, when you touch
// two sensors, your body will transfer the charge between
// sensors.
*port &= ~(bitmask);
*ddr |= bitmask;
//return cycles;
Serial.println(cycles);
}
void Tone(String data){
int idx = data.indexOf('%');
int len = Str2int(data.substring(0,idx));
String data2 = data.substring(idx+1);
int idx2 = data2.indexOf('%');
int pin = Str2int(data2.substring(0,idx2));
String data3 = data2.substring(idx2+1);
String melody[len*2];
split(melody,len*2,data3,'%');
for (int thisNote = 0; thisNote < len; thisNote++) {
int noteDuration = 1000/Str2int(melody[thisNote+len]);
int note = Str2int(melody[thisNote]);
tone(pin, note, noteDuration);
int pause = noteDuration * 1.30;
delay(pause);
noTone(pin);
}
}
void ToneNo(String data){
int pin = Str2int(data);
noTone(pin);
}
void DigitalHandler(int mode, String data){
int pin = Str2int(data);
if(mode<=0){ //read
Serial.println(digitalRead(pin));
}else{
if(pin <0){
digitalWrite(-pin,LOW);
}else{
digitalWrite(pin,HIGH);
}
//Serial.println('0');
}
}
void AnalogHandler(int mode, String data){
if(mode<=0){ //read
int pin = Str2int(data);
Serial.println(analogRead(pin));
}else{
String sdata[2];
split(sdata,2,data,'%');
int pin = Str2int(sdata[0]);
int pv = Str2int(sdata[1]);
analogWrite(pin,pv);
}
}
void ConfigurePinHandler(String data){
int pin = Str2int(data);
if(pin <=0){
pinMode(-pin,INPUT);
}else{
pinMode(pin,OUTPUT);
}
}
void shiftOutHandler(String data) {
String sdata[4];
split(sdata, 4, data, '%');
int dataPin = sdata[0].toInt();
int clockPin = sdata[1].toInt();
String bitOrderName = sdata[2];
byte value = (byte)(sdata[3].toInt());
if (bitOrderName == "MSBFIRST") {
shiftOut(dataPin, clockPin, MSBFIRST, value);
} else {
shiftOut(dataPin, clockPin, LSBFIRST, value);
}
}
void shiftInHandler(String data) {
String sdata[3];
split(sdata, 3, data, '%');
int dataPin = sdata[0].toInt();
int clockPin = sdata[1].toInt();
String bitOrderName = sdata[2];
int incoming;
if (bitOrderName == "MSBFIRST") {
incoming = (int)shiftIn(dataPin, clockPin, MSBFIRST);
} else {
incoming = (int)shiftIn(dataPin, clockPin, LSBFIRST);
}
Serial.println(incoming);
}
void SS_set(String data){
delete sserial;
String sdata[3];
split(sdata,3,data,'%');
int rx_ = Str2int(sdata[0]);
int tx_ = Str2int(sdata[1]);
int baud_ = Str2int(sdata[2]);
sserial = new SoftwareSerial(rx_, tx_);
sserial->begin(baud_);
Serial.println("ss OK");
}
void SS_write(String data) {
int len = data.length()+1;
char buffer[len];
data.toCharArray(buffer,len);
Serial.println("ss OK");
sserial->write(buffer);
}
void SS_read(String data) {
char c = sserial->read();
Serial.println(c);
}
void pulseInHandler(String data){
int pin = Str2int(data);
long duration;
if(pin <=0){
pinMode(-pin, INPUT);
duration = pulseIn(-pin, LOW);
}else{
pinMode(pin, INPUT);
duration = pulseIn(pin, HIGH);
}
Serial.println(duration);
}
void pulseInSHandler(String data){
int pin = Str2int(data);
long duration;
if(pin <=0){
pinMode(-pin, OUTPUT);
digitalWrite(-pin, HIGH);
delayMicroseconds(2);
digitalWrite(-pin, LOW);
delayMicroseconds(5);
digitalWrite(-pin, HIGH);
pinMode(-pin, INPUT);
duration = pulseIn(-pin, LOW);
}else{
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
delayMicroseconds(2);
digitalWrite(pin, HIGH);
delayMicroseconds(5);
digitalWrite(pin, LOW);
pinMode(pin, INPUT);
duration = pulseIn(pin, HIGH);
}
Serial.println(duration);
}
void SV_add(String data) {
String sdata[3];
split(sdata,3,data,'%');
int pin = Str2int(sdata[0]);
int min = Str2int(sdata[1]);
int max = Str2int(sdata[2]);
int pos = -1;
for (int i = 0; i<8;i++) {
if (servo_pins[i] == pin) { //reset in place
servos[pos].detach();
servos[pos].attach(pin, min, max);
servo_pins[pos] = pin;
Serial.println(pos);
return;
}
}
for (int i = 0; i<8;i++) {
if (servo_pins[i] == 0) {pos = i;break;} // find spot in servo array
}
if (pos == -1) {;} //no array position available!
else {
servos[pos].attach(pin, min, max);
servo_pins[pos] = pin;
Serial.println(pos);
}
}
void SV_remove(String data) {
int pos = Str2int(data);
servos[pos].detach();
servo_pins[pos] = 0;
}
void SV_read(String data) {
int pos = Str2int(data);
int angle;
angle = servos[pos].read();
Serial.println(angle);
}
void SV_write(String data) {
String sdata[2];
split(sdata,2,data,'%');
int pos = Str2int(sdata[0]);
int angle = Str2int(sdata[1]);
servos[pos].write(angle);
}
void SV_write_ms(String data) {
String sdata[2];
split(sdata,2,data,'%');
int pos = Str2int(sdata[0]);
int uS = Str2int(sdata[1]);
servos[pos].writeMicroseconds(uS);
}
void sizeEEPROM() {
Serial.println(E2END + 1);
}
void EEPROMHandler(int mode, String data) {
String sdata[2];
split(sdata, 2, data, '%');
if (mode == 0) {
EEPROM.write(Str2int(sdata[0]), Str2int(sdata[1]));
} else {
Serial.println(EEPROM.read(Str2int(sdata[0])));
}
}
void SerialParser(void) {
char readChar[64];
Serial.readBytesUntil(33,readChar,64);
String read_ = String(readChar);
//Serial.println(readChar);
int idx1 = read_.indexOf('%');
int idx2 = read_.indexOf('$');
// separate command from associated data
String cmd = read_.substring(1,idx1);
String data = read_.substring(idx1+1,idx2);
// determine command sent
if (cmd == "dw") {
DigitalHandler(1, data);
}
else if (cmd == "dr") {
DigitalHandler(0, data);
}
else if (cmd == "aw") {
AnalogHandler(1, data);
}
else if (cmd == "ar") {
AnalogHandler(0, data);
}
else if (cmd == "pm") {
ConfigurePinHandler(data);
}
else if (cmd == "ps") {
pulseInSHandler(data);
}
else if (cmd == "pi") {
pulseInHandler(data);
}
else if (cmd == "ss") {
SS_set(data);
}
else if (cmd == "sw") {
SS_write(data);
}
else if (cmd == "sr") {
SS_read(data);
}
else if (cmd == "sva") {
SV_add(data);
}
else if (cmd == "svr") {
SV_read(data);
}
else if (cmd == "svw") {
SV_write(data);
}
else if (cmd == "svwm") {
SV_write_ms(data);
}
else if (cmd == "svd") {
SV_remove(data);
}
else if (cmd == "version") {
Version();
}
else if (cmd == "to") {
Tone(data);
}
else if (cmd == "nto") {
ToneNo(data);
}
else if (cmd == "cap") {
readCapacitivePin(data);
}
else if (cmd == "so") {
shiftOutHandler(data);
}
else if (cmd == "si") {
shiftInHandler(data);
}
else if (cmd == "eewr") {
EEPROMHandler(0, data);
}
else if (cmd == "eer") {
EEPROMHandler(1, data);
}
else if (cmd == "sz") {
sizeEEPROM();
}
}
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
}
void loop() {
SerialParser();
}
the Micro Python board
Micro Python 控制板是由劍橋大學理論物理學家喬治·達米安(Damien George)所研發出來的, 它比 Arduino 更強大,比 Raspberry PI 更簡易,你只要將 Python 的程式貼到控制板內即可。
它提供一個 USB 接口,可以讓您連接電腦,因為它是屬於跨平台的,所以 Windows、Mac 或 Linux 作業系統都可以使用。
原文詳 http://www.wired.co.uk/news/archive/2013-12/06/micro-python
安裝 MySQL for Python
如果您想有計畫地處理大量資料,我想您需要一個資料庫軟體來處理這件事情,而 MySQL 就是最佳的選擇之一。
目前 MySQL 為 3.23 版,支援 Python 2.4~2.7 版,未來才會支援 Python 3.x 版。
下載
切換到下載頁 http://sourceforge.net/projects/mysql-python/?source=dlp,點擊綠色的 Download 按鈕。
安裝
雙擊 MySQL-python-1.2.4b4.win32-py2.7.exe,然後依照視窗內的指示進行安裝。
首先用 MySQL 建立一個含有溫濕度數據的氣象資料表,如下:
create table weatherData (
weatherDataID int(11) AUTO_INCREMENT NOT NULL,
humidity decimal(4,2) NOT NULL,
tempC decimal(4,2) NOT NULL,
constraint weatherData_PK primary key (weatherDataID)
);
Python Code
#!/usr/bin/python
import serial
import MySQLdb
#establish connection to MySQL. You'll have to change this for your database.
dbConn = MySQLdb.connect("localhost","database_username","password","database_name") or die ("could not connect to database")
#open a cursor to the database
cursor = dbConn.cursor()
device = 'COM5' #this will have to be changed to the serial port you are using
try:
print "Trying...",device
arduino = serial.Serial(device, 9600)
except:
print "Failed to connect on",device
try:
data = arduino.readline() #read the data from the arduino
pieces = data.split("\t") #split the data by the tab
#Here we are going to insert the data into the Database
try:
cursor.execute("INSERT INTO weatherData (humidity,tempC) VALUES (%s,%s)", (pieces[0],pieces[1]))
dbConn.commit() #commit the insert
cursor.close() #close the cursor
except MySQLdb.IntegrityError:
print "failed to insert data"
finally:
cursor.close() #close just incase it failed
except:
print "Failed to get data from Arduino!"
目前 MySQL 為 3.23 版,支援 Python 2.4~2.7 版,未來才會支援 Python 3.x 版。
下載
切換到下載頁 http://sourceforge.net/projects/mysql-python/?source=dlp,點擊綠色的 Download 按鈕。
安裝
雙擊 MySQL-python-1.2.4b4.win32-py2.7.exe,然後依照視窗內的指示進行安裝。
首先用 MySQL 建立一個含有溫濕度數據的氣象資料表,如下:
create table weatherData (
weatherDataID int(11) AUTO_INCREMENT NOT NULL,
humidity decimal(4,2) NOT NULL,
tempC decimal(4,2) NOT NULL,
constraint weatherData_PK primary key (weatherDataID)
);
Python Code
#!/usr/bin/python
import serial
import MySQLdb
#establish connection to MySQL. You'll have to change this for your database.
dbConn = MySQLdb.connect("localhost","database_username","password","database_name") or die ("could not connect to database")
#open a cursor to the database
cursor = dbConn.cursor()
device = 'COM5' #this will have to be changed to the serial port you are using
try:
print "Trying...",device
arduino = serial.Serial(device, 9600)
except:
print "Failed to connect on",device
try:
data = arduino.readline() #read the data from the arduino
pieces = data.split("\t") #split the data by the tab
#Here we are going to insert the data into the Database
try:
cursor.execute("INSERT INTO weatherData (humidity,tempC) VALUES (%s,%s)", (pieces[0],pieces[1]))
dbConn.commit() #commit the insert
cursor.close() #close the cursor
except MySQLdb.IntegrityError:
print "failed to insert data"
finally:
cursor.close() #close just incase it failed
except:
print "Failed to get data from Arduino!"
uint8_t 是甚麼?
uint8_t 在 Arduino 裏相當於 byte。維基百科頁面 Stdint.h (http://en.wikipedia.org/wiki/Stdint.h) 有更多的信息。
基本上 Stdint.h 是 C\C++ 的檔頭,它是用來定義一些跨平台的資料型態。當您需要一些無正負符號的位元數值時,就可以使用它。例如:
void loop() {
基本上 Stdint.h 是 C\C++ 的檔頭,它是用來定義一些跨平台的資料型態。當您需要一些無正負符號的位元數值時,就可以使用它。例如:
void loop() {
uint8_t volume = Serial.read() -
'a'
;
....
}
訂閱:
文章 (Atom)