摘要:RAPIRO - Raspberry Pi機器小女僕(3)-手機遙控版
繼上次用wii remote藍牙操作小機器人後
安迪兒又再讓小機器人更進化一些
(改用手機控制的版本~XD)
使用手機網頁操刺的方式,一般的pc、手機、平版都可以去控制,
這樣一來又更方便了,也是為了之後加更多的東西上去(影像、聲音)
大約的想法是這樣
1.建立基本的Rapiro動作指令
2.建立web server供控制網頁呼叫
3.客製簡易的控制頁面
這次改良了wii搖桿控制的方式
增加web server 、控制頁面來達到手機操控的需求
想使用網頁控制Rapiro小機器人有2種方式
a.使用python或其它程式(只要有支援Arduino模組的程式庫)都可以拿來開發
b.使用系統的mincom方式去呼叫(透過事先建立好指令集的方式)
安迪兒這邊為了通用,使用第二種方式
把一些基本控制寫在Rapiro裡(Arduino IDE裡面先寫好想要的動作)
然後在Raspberry pi版上建立指令集
開發web server和前端的操作頁面
(不限程式語法,因為只是傳個web訊息回來呼叫指令)
步驟如下
1.先建立Raspberry Pi呼叫小機器人的管道-用mincom的方式去對Rapoiro下指令
首先連入機器人的Raspberry pi (linux)
ssh pi@192.xx.xx.xx
輸入密碼登入後
在consol下,安裝minicom
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install minicom
裝完後測一下直接下指令能不能操作
echo "#M6" | sudo minicom -b 57600 -o -D /dev/ttyAMA0
可參考前一篇
RAPIRO - Raspberry Pi機器小女僕(2)使用wii藍芽控制
http://goo.gl/B7jWBh
2.為了程式開發方便,先設定一下samba
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get -y install samba
$ sudo apt-get -y install samba-common-bin
裝好後,設定一下smb設定檔
sudo nano /etc/samba/smb.conf
拉到最底加上下面這段(可自由更改)
[pi]
comment = Pihome
path = home/pi
public = Yes
read only = No
writable = Yes
quest ok = Yes
force user = pi
directory mode = 0777
create mode = 0666
存檔後,設定一下samba密碼
$sudo smbpasswd -a pi
smb pass: xxxx
重啟一下samba,就可以用網路芳鄰找到嘍
$sudo service samba restart
windows 檔案總管 輸入 //192.168.xx.xx/
mac Finder-連接-前往伺服器 輸入 smb://192.168.xx.xx/
3.以上都設定好的話,再來就是建立web server和控制頁面嘍
web server有很多選擇,php、python
安迪兒這邊因為想快速&簡易測試可行性
所以挑nodejs來試寫一個聽80 port的web server
(nodejs寫web server真的很方便~超神的)
附上安迪兒簡易的Server原始碼
其中控制頁面就隨便設計個html網就可以
('./1.html'那邊可以自行更換)
[PiroServer.js]
var server;
var ip = "192.168.0.19";
var port = 80;
var http = require("http");
var qs = require('querystring');
var url = require('url');
var fs = require('fs');
var exec = require('child_process').exec,child;
var execstr='';
process.env.PATH+=":/home/pi";
//Create http server
server = http.createServer(function (req, res) {
var params = url.parse(req.url,true);
//get json
console.log(params.query);
var gf=params.query;
//console.log(gf.a);
//get post
if( req.method == "POST" ) {
var postdata = "";
req.on('data', function(data) {
postdata += data;
});
req.on('end', function() {
var post_params = qs.parse(postdata);
if (post_params!=null & post_params!=''){console.log(post_params);}
});
}
fs.readFile('./1.html', 'utf-8',function (err, data) {
if (err) throw err;
res.writeHead(200, {
"Content-Type": "text/html"
});
res.write(data);
res.end();
});
if (gf.a!=null & gf.a!=''){console.log('gf.a='+gf.a);}
if (gf.a==0){execstr='pirom0';}
if (gf.a==1){execstr='pirom1';}
if (gf.a==2){execstr='pirom2';}
if (gf.a==3){execstr='pirom3';}
if (gf.a==4){execstr='pirom4';}
if (gf.a==5){execstr='pirom5';}
if (gf.a==6){execstr='pirom6';}
if (gf.a==7){execstr='pirom7';}
if (gf.a==8){execstr='pirom8';}
if (gf.a==9){execstr='pirom9';}
console.log(execstr);
if (execstr!==''){
child =exec(execstr, function(err, out, code) {
console.log('stdout: ' + out);
console.log('stderr: ' + err);
console.log('code: ' + code);
if (err !== null) {
console.log('error!!!!!!!!!!!!!!!!');
}
});
};
});
//listen http server,80 port
server.listen(port, ip);
console.log("Server running at http://" + ip + ":" + port);
4.完成後,執行sudo node PiroServer.js
打開手機的瀏覽器,開始來玩玩嘍XD~
(若想開機後直接執行,可以參考下面這個)
http://www.raspberrypi.org/forums/viewtopic.php?t=50519&p=392273
實際影片:
以上~~收工嘍~~XD