RAPIRO - Raspberry Pi機器小女僕(3)-手機遙控版

摘要: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