2017-09

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XBee WiFiを使ってWebサーバーからファイルを取得する

概要:


XBeeWiFiでHTTP接続を試してみました.

*私はネットの接続手法に関しては素人?です.
 違うという部分があったらご指摘していただけるとありがたいです.


実験環境:


・X-CTU
・XBee WiFi (Ver.102B)


実験:


まず,XBeeWiFiの設定をします.
設定値は以下のようになっています.
・SSID → 任意の値
・Network Type → TCP
・Destination Port → 0x50 (80番ポート:HTTP)
・Source Port → 0x50(80番ポート:HTTP)
・Destination IP Address → 接続先のIP(202.218.219.147)
・Encryption Enable → WPA(TKIP)
・Pass Phrase → 任意の値
*X-CTU内でのポートの入力は16進数です.

では,次にアクセスできるかを確かめてみます.

X-CTUの【Terminal】タブの
【Assenble Pacletw】ボタンを押すと以下のような画面が現れます.
xctu-packet

次に,以下の内容を入力します.

GET /fnetwork/accesstest/at.html HTTP/1.1
Host: www.atmarkit.co.jp
(改行)


このメッセージは,こちらのサイトから頂いて来ました.
HTTP語でWebブラウザとしゃべってみよう

X-CTU【SendData】ボタンを押して,メッセージを送信しみます.
at.html をWebサーバーから取得し,表示することができます.
xctu-response

このようにWebサーバーからデータを取得することができます.
実際に複数のサイトで使用するには,
ATコマンドで接続先のWebサーバーを変更しながら使うことになりそうです.


感想:


次は何を作ってみようか?
天気予報,Twitter,Facebookとか何でもできそうな気がする.
作ることで下のレイヤのことも理解できるので嬉しいですね.


参照サイト:


HTTP語でWebブラウザとしゃべってみよう

スポンサーサイト

XBee Wi-Fi を使って台車を動かす

概要:


XBeeWi-Fiを使ったキーボードコントローラー作成と台車(ロボット)制御をやってみました。


環境構築:


今回、コントローラー(ソフトウェア)作成としてpygameというライブラリを使用しました。
また、台車に関しては以前作成したものを使用しています。
これはシリアル通信で制御できる仕様となっており、XBeeとつなげることで動かすことができます。

以下使用したもの。
・ pygame (pythonライブラリ)
・ シリアル通信で制御できる台車
・ XBee Wi-Fi


実行結果:


こんな感じのキーボードで制御できるソフトをPythonで作成しました。




実際に動かしてみるとこんな感じになります。




成果物:


今回作成したソフトのソースは以下に置いておきます。
実行するにはpygameをインストールする必要があります。
  【ダウンロード】  


参照サイト:


ChickLab XBee Wi-Fi 接続の設定までやってみた
lavish7000 [pygame] 画像を表示する
pygame Document
オケラボブログの避難所跡地

Mac で Wiiコントローラー を使う (C++)

概要:
WiimoteをMacでC++を使って動かす資料が少なかったので、
ライブラリ導入とサンプル作成のためのメモです。

使用機器:
・Wiimote(Wiiコントローラー)
・PC(Mac)

導入方法:
「WiiCpp」というライブラリを使用します。

1. ソースのダウンロード
svn co https://wiic.svn.sourceforge.net/svnroot/wiic


2. ビルドとインストール
 cd (解凍したフォルダ)
mkdir build
cd build
cmake ../src
make
make doc
sudo make install

ヘッダとライブラリファイルは以下のディレクトリにインストールされます。
/usr/local/include
/usr/local/bin


サンプル実行:
サンプルを実行してみます。
 cd (解凍したフォルダ)/build/bin
./wiicpp-sample

これでWiiremoteをONにするだけで動作するはず。

XCode4を使ったサンプル作成:
XCodeで動かす場合は、ライブラリのリンカを設定させる必要があります。
下の画像のようにリンカを設定をします。
wiicライブラリリンク
あとは適当にサンプルを参考にしてソースを書いてコンパイルをするだけです。


#include
#include
#include
using namespace std;

// 状態が更新されたら呼ぶ関数
void callHandleEvent( CWiimote& wm ) {
if( wm.Buttons.isPressed(CButtons::BUTTON_A) ) {
cerr << "button A pressed" << endl;
}
if( wm.Buttons.isPressed(CButtons::BUTTON_B) ) {
cerr << "button B pressed" << endl;
}
}

void callHandleDisconnect( CWiimote& wm ) {
cerr << "Disconnected :" << wm.GetID() << endl;
}

int main (int argc, const char * argv[]) {

CWii wii;
bool reload_flag = false;
std::vector::iterator it;

// コントローラーの検索開始
std::vector& wiimotes = wii.FindAndConnect();

// 何も接続されていなかったら終了
if( !wiimotes.size() ) {
std::cerr << "can't find wiimote" << std::endl;
return 0;
}

do {
// Wiimoteが接続解除された場合、動的配列を再構築する
if( reload_flag ) {
wiimotes = wii.GetWiimotes();
}

// Wiimoteのデータ更新
if( wii.Poll() ) {
// 取得したコントローラーに対して操作を行う
for( it=wiimotes.begin(); it!=wiimotes.end(); ++it ) {
switch( it->GetEvent() ) {
// コントローラーの接続解除がされた場合の処理
case CWiimote::EVENT_DISCONNECT:
case CWiimote::EVENT_UNEXPECTED_DISCONNECT:
reload_flag = true;
callHandleDisconnect( *it );
break;

// 状態が更新されたら
case CWiimote::EVENT_EVENT:
callHandleEvent( *it );
break;

default:
break;
}
}
}

// 接続しているコントローラーがなくなったら終了
} while (wiimotes.size());

return 0;
}


まとめ:
簡単にC++でWiimoteを動かすことが出来ました。
ライブラリの作成者様に感謝!

参考サイト
A C/C++ Library for Wiimote

ルンバプログラミング 音楽再生

概要:
ルンバライブラリにバグがあったので、
修正ついでに音楽再生機能を追加しました。


使用機器:
・ルンバ
・シリアル変換ケーブル
・制御用PC
・Wiiコントローラー(制御用)


修正箇所:
・センサのデータが正常にとれていなかったバグを修正
・driveDirect関数を使っても動作しなかったバグを修正
・音楽再生機能を追加


サンプル:
修正したサンプルプログラムは以下のものになっています。

#include
#include
#include "wiimote.h"
#include "RoombaController.h"

int main() {
// wiimoteの接続
wiimote wm = wiimote();
while(!wm.Connect(wiimote::FIRST_AVAILABLE)) ;
wm.SetReportType(wiimote::IN_BUTTONS_ACCEL_IR_EXT); // no IR dots
std::cerr << "wiimote conected!!" << std::endl;

roomba::Controller controller;
controller.initialize( "COM4" );

// 音楽登録
std::vector< roomba::Sound > music;
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::REST,0), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::DS,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::REST,0), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::G,4), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::REST,0), 8 ) );
music.push_back( roomba::Sound( roomba::Tone(roomba::Note::F,4), 32 ) );

// 音楽0に登録(使用できるのは、0-4番まで)
controller.song( 0, music );

while( !wm.Button.Home() ) {
// wiiが更新されるまで停止
while( wm.RefreshState() == NO_CHANGE ) Sleep(1);

// Bボタンが押されたら、掃除用のモーターON
if( wm.Button.B() ) controller.motors( true, true, true );
else controller.motors(false,false,false);

// Aボタンが押されたら、音楽再生
if( wm.Button.A() ) controller.play( 0 );

// 十字キーを使った操作
if( controller.renewSensorData() ) {
if( wm.Button.Up() ) {
controller.driveDirect( 100, 100 );
}
else if( wm.Button.Down() ) {
controller.driveDirect( -100, -100 );
}
else if( wm.Button.Right() ) {
controller.driveDirect( 100, -100 );
}
else if( wm.Button.Left() ) {
controller.driveDirect( -100, 100 );
}
else {
controller.driveDirect( 0, 0 );
}
}
}
wm.Disconnect();
return 0;
}


動作結果:
これを用いて動かした動画は以下のようになります。


最後に修正したライブラリをおいておきます。
ルンバ制御クラス(修正版)

これでだいたいの機能を実装が終わったかなと。
個人的には、オドメトリの修正周りをやってみたいと思っています。

Homebrew で OpenCV2.3.1a をインストール

ちょいとMacにOpenCVを導入する際に引っかかったのでメモ。

普通はこれで通るはずですが、

sudo brew update
sudo brew install opencv


現状だと、

#if PNG_LIBPNG_VER_MAJOR*100 + PNG_LIBPNG_VER_MINOR >= 104
png_set_expand_gray_1_2_4_to_8( png_ptr );
#else
png_set_gray_1_2_4_to_8( png_ptr );
#endif

このようなエラーがでます。

なので、githubのOpenCVについてのWikiを参考にして、
/usr/local/Library/Fomula/opencv.rb
ファイル内の、

def install
args = std_cmake_parameters.split
args << " -DOPENCV_EXTRA_C_FLAGS='-arch i386 -m32'" if ARGV.include? "--build32"



def install
ENV.x11

ENV.append "CFLAGS", "-I/usr/X11/include" # env.x11 does not add this line
# ENV.append "CPPFLAGS", "-I/usr/X11/include"
ENV.append "CXXFLAGS", "-I/usr/X11/include" # env.x11 does not add this line

args = std_cmake_parameters.split
args << " -DOPENCV_EXTRA_C_FLAGS='-arch i386 -m32'" if ARGV.include? "--with-x --build32"

に編集し、

sudo brew update
sudo brew install opencv


で正常にインストールできるようになりました。
そのうち修正されると思いますが、メモ程度に。

参考サイト:
https://github.com/mxcl/homebrew/pull/6424

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

カレンダー

08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

FC2カウンター

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (7)
日記 (7)
wiiremote (1)
google (1)
回路 (3)
psp (1)
programing (15)
linux (0)
OpenWRT (3)
kinect (1)
Raspberry Pi (8)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

google adsense

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。