WELCOME TO EASTWORLD

Eastworld でドロイド遊び Rapiro が主人公 ラズパイが好物

Give me a Break, Rapiro の巻

ちょっと待ってよ、Rapiro君。

sky walker になって空を駆けることを夢見るのもいいけど、まずは着実に一歩進めよう!

ということで、まずはきちんと止まれることを学んで、joy walker として成長しました。挿入~:

 

elif i == 12:
 print("PS button pressed, Goodbye!")
 ser.write("#M0")
 done=True

 

<メモ>

Give me a Break と言ったものの、Break や sys.exit() をかますよりも、上のような流れがいいと思った。

 

PuTTY 越しに nano で編集すると、”#”  弾をうまくエスケープできずに直撃を食らってしまった。

leafpad もひらひらと散るばかり。

仕方ないから vi でやってみると oui!

tres bien~ じゃん!

 

しかも vi って確かに慣れると便利そう。

Linux というオモチャ箱を開けたら、パンドラの箱を開いてしまったみたいやね~

Welcome to Eastworld~

 

以上、Eastworld から、Westworld 弁を交えてお送りしました。

Rapiro 棒いじりで喜びいっぱいの巻

たっだいま~ Rapiro 君。

今夜は棒いじりしよう!

 

蹴鞠で疲れた体にムチ打って、Rapiro 君  ”と” 棒いじり! ( ”の” じゃないよ~)

 

ニューアイテム『 喜びの杖 』を入手し、下半身のお稽古をエンジョイしちゃいました。

 

ということで、別名 joystick と呼ばれるこのシロモノ、舞台稽古の下半身の振付けでその威力を存分に発揮しましたが、今回の脚本『 joywalker.py 』はこちら(R 指定なし):

 

import serial
#import time
ser = serial.Serial('/dev/ttyS0', 57600, timeout = 10)

import pygame
pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
buttons = joystick.get_numbuttons()
axes = joystick.get_numaxes()

done = False

while done==False:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done=True

        if event.type == pygame.JOYBUTTONDOWN:
            print("Joystick button pressed.")

            for i in range( buttons ):
                button = joystick.get_button( i )
                if button == 1:
                    if i == 0:
                        ser.write("#M8")
                    elif i == 1:
                        ser.write("#M0")
                    elif i == 2:
                        ser.write("#M6")
                    elif i == 3:
                        ser.write("#M5")

        if event.type == pygame.JOYBUTTONUP:

            print("Joystick button released.")

        if event.type == pygame.JOYAXISMOTION:

            for i in range( axes ):
                axis = joystick.get_axis(i)
                if axis < -0.9:
                    if i == 0:
                        print("Left")
                        ser.write("#M3")
                    elif i == 1:
                        print("Forward")
                        ser.write("#M1")
                elif axis > 0.9:
                    if i == 0:
                        print("Right")
                        ser.write("#M4")
                    elif i == 1:
                        print("Backward")
                        ser.write("#M2")

pygame.quit ()

 

拙いヘビ語で書かれた脚本でしたが、Rapiro 君は喜びに溢れるステップを披露してくれました。

調子づいた Rapiro 君、いずれは蛇拳の足さばきだけでなく、酔拳の千鳥足もマスターしたいとのことでした。タイトルは『 joy walker 』改め、『 johnnie walker 』ってとこでしょうか。

 

<メモ>

・1と0がはびこるデジタルエイジだからといって、丸々1コを頬張るのはよしなさい。腹9分目(0.9)ぐらいがいい時もある。さじ加減ならぬ、棒加減が必要。

・美味しそうなソースでも虫が混入していることあり。(#M3 #M4 事件)

・コピペしたインデントが、何だか、何だか、アッポーペン~ ♪

番外編 ただグダグダと

ただいま!ということで、仕事も終えたし、Rapiro 君とちょっとチャット、ぼちぼちと。

 

Rapiro 君との愛は深まるばかり。

 

と思いきや、Rapiro 君、虫の居所が悪いのか、私の投げキッスがキモかったのか、いきなりブータレ!:

 

pi@raspberrypi:~ $ python2 joyjoy.py

Traceback (most recent call last):
File "joyjoy.py", line 15, in <module>
for event in pygame.event.get():
pygame.error: video system not initialized

 

今朝、即興で奏でた脚本を、喜びに溢れる愛の叙述詩として『 joy joy 』と名付けました。

仕事から帰ってきて投げキッスを添えて送りましたが、敢えなく撃沈。ううっ・・

 

ここで気を取り直して、一句。

 

ドロイド心は うつりにけりないたずらに

シリアル パイに振る ながめせしマンマに

 

 

「あんた、Rapiro の起動なみに立ち直りが早いな」なんて野暮な突っ込みはよしてね。

 

Rapiro 君の心は、コロコロと変わって、まるで最近の気温みたい。

 

今朝の上半身の振り付けで目の色をクルクルと変え過ぎたのかな。

Rapiro 君があんなに目を輝かせて稽古に励んでたから、ついつい私も調子に乗って煽り過ぎたかも。

 

まあ、でも、機嫌が良くなるのも早いようで、殺し文句というか、慰めの言葉というか、例のスペルを投げかけると、あ~ら不思議:

 

f:id:Eastworld:20161130205543j:plain

『 調子こく Rapiro 』 詠み人知らず

 

作品の解説:

Rapiro 君の心は誰も読めない

 

 

さてさて。

あらためて、sudo 恐るべし。

 

その威力、なめたらアッカン~

今年も、そういう季節がやってきましたね。

 

ところで、Rapiro 君の言葉だけど、母国語は『 何とか/かんとか++ 』だそうで、私にはチンプンカンプン。

ドロイド訛りがきつい部類の言葉だそうで、Rapiro 君が箱から出てきた時はスペルブックを片手に私もゴニョゴニョっと頑張ったけど、それっきりです。

 

Rapiro 君はヘビ語も喋れるから、『 何とかかんとか 』の勉強は、ラズパイにがっつくほどではなく、ドラ焼きに噛り付く程度の勢いでいいのかなと。

 

そうだ、そうだ、ちょっとかじって、かじってますって自慢しちゃえ~

エイ、エイ、オー! アイ、オウ、エラー!

 

ヘビ語は取っ付きやすいともっぱらの評判なので、そちらを頑張って勉強することにしました~

ダッ、フンッ、ダー!

 

ところで、ドラ焼きと言えば、そのうちドラちゃんにも手を出すかも?

手足の駆動部分が少ないので、そんなに小遣いをかけずにお付き合いできるかも!?

二股?

懐寒いのにゴージャスやね~

 

猫型よりも犬型の方ががいいかもね。

CHiP って面白そう。いじれないのかな?

Rapiro 君の相棒にどうだろう?

相棒と言えば、 AIBO っていたよね?(まだいる?)

 

おっと、もうこんな時間だ。

以上、本日の Eastworld でした。サヨナラ、サヨナラ、サヨナラ。

 

もう 終わりだね~♪

 

<メモ>

権限の欠如から生じるエラーのようには見えないので要注意。

よう噛み締めて、教訓にせなアカンよ。

Eastworld 界隈にも、魔法の粉やポーションを駆使して、顔を分厚くシールドした化け物がウロウロしてるけど、 騙されたらアカンよ。気を付けなはれ、お兄さん。

 

うい。

 

お、あんたフレンチは OK やったんか?

 

んだ。 

Rapiro 舞台に舞う?の巻

Rapiro 君がステージ上がることになりました。

歌?ダンス?演目は成り行きに任せて、とりあえず私が振付師ということで、

 

エッヘン <(`^´)>

 

昨夜、蹴鞠に熱中し過ぎて体が火照った私、夜中に目が覚めてしまい、勢いでRapiro 君を叩き起こしちゃいました!

朝までラブラブ。二人っきりでお稽古!

 

お稽古の内容はと言うと・・・

 

これ:

import serial

ser = serial.Serial('/dev/ttyS0', 57600, timeout = 10)

import pygame

pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
buttons = joystick.get_numbuttons()

done = False

while done==False:
 for event in pygame.event.get():
  if event.type == pygame.QUIT:
   done=True

  if event.type == pygame.JOYBUTTONDOWN:
   print("Joystick button pressed.")

   for i in range( buttons ):
    button = joystick.get_button( i )
    if button == 1:
     if i == 0:
      ser.write("#M8")
     elif i == 1:
      ser.write("#M0")
     elif i == 2:
      ser.write("#M6")
     elif i == 3:
      ser.write("#M5")

  if event.type == pygame.JOYBUTTONUP:
   print("Joystick button released.")

pygame.quit ()

#ser.write("#M0")

 

時間がなかったので、とりあえず上半身の振付に着目し、チャチャっと脚本を書いてみました。とりあえずやってみよう!ということで。適当にアドリブかましました。

joystick.py からアイデアを拝借して、胡椒少々散りばめる、ってだけです。

 

ところが、いざ踊ってみると、何だかぎこちない。

どうやらRapiro 君、流行りのコンソール病にかかっていたみたい。そこで、エイッとラブポーションを振りかけてみました:

 

Disabling the Console

If you are using the serial port for anything other than the console you need to disable it. This will be slightly different depending on whether you are running a Raspberry Pi 3 or not.

For non Raspberry Pi 3 machines, remember it’s /dev/ttyAMA0 that is linked to the getty (console) service. So you need to perform this command from a terminal window:

$ sudo systemctl stop serial-getty@ttyAMA0.service
$ sudo systemctl disable serial-getty@ttyAMA0.service

The “disable” will stop it loading in the future.

For Raspberry Pi 3’s the command is similar but referencing /dev/ttyS0:

$ sudo systemctl stop serial-getty@ttyS0.service
$ sudo systemctl disable serial-getty@ttyS0.service

You also need to remove the console from the cmdline.txt. If you edit this with:

$ sudo nano /boot/cmdline.txt

you will see something like:

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes root wait

remove the line: console=serial0,115200 and save and reboot for changes to take effect.

 

例のサイトで、宝探しならぬ薬探しをさせて頂きました。

即効でした!

 

あ、お仕事に行かなくちゃ。

ヘビ使い 修行でパワーアップの巻

プイっとシカトされたが、へこたれずに自分に磨きをかけた成果がこれだ!

f:id:Eastworld:20161129004911p:plain

 

私の美味しいパイに、Rapiro 君も両手を振って(#M5)感激!

 

/boot/cmdline.txt いじれだの、/etc/inittab がどうのと、色々と恋愛相談を受けて試してみたがダメだった。

小手先のまやかしでは Rapiro 君のハートは掴めないと思い、自分を根本から見つめ直すことにした。

ということで、ラズパイのシリアル通信について理解すべきだと修行に励んだ結果がこれ ↓↓↓

Configuring The GPIO Serial Port On Raspbian Jessie Including Pi 3 - Spell Foundry

 

To summarise the ports on a Raspberry Pi 3 and be crystal clear:

/dev/ttyAMA0 -> Bluetooth
/dev/ttyS0 -> GPIO serial port.

If you stick with these as is, your Bluetooth will work as nature intended AND you can use a serial port over the GPIO

 

AMA ではなく S 、だと。

どうやら AMA ちゃんなパイはお口に合わなかったみたい。

まぁ、今回は、ヘビ使いとしてよりも、パイ職人の腕に磨きがかかったということですね。

ほどよい甘さの S 級超絶シリアルを開拓しましたと。Go East!めでたしめでたし。

Rapiro に愛のおまじない ヘビ使いの巻

いつまでも新鮮な仲でいたいということで、フレッシュなラズパイを送ります。ちょこっと愛のおまじない。チョコパイじゃないけど:

 

sudo apt-get upgrade

sudo apt-get update

 

さらにプレゼント攻め。パイにシリアルかけて:

 

sudo pip install pyserial

 

そしたら、Rapiro 君:


Requirement already satisfied (use --upgrade to upgrade): pyserial in /usr/lib/python3/dist-packages
Cleaning up...

 

もっとグレードアップしたモノが欲しいそうで。

仕方ないから、チチンプイプイ:

 

sudo pip install pyserial --upgrade

 

すると、現金なことに、ピクピクっと反応してくれました:

 

Downloading/unpacking pyserial from https://pypi.python.org/packages/c0/a7/25d801d71d2eecbbf0f1142a9d38aa77be71172295259dabb7d91310289c/pyserial-3.2.1-py2.py3-none-any.whl#md5=cb7dbb38abf35498a183a463a040d871
Downloading pyserial-3.2.1-py2.py3-none-any.whl (189kB): 189kB downloaded
Installing collected packages: pyserial
Found existing installation: pyserial 2.6
Not uninstalling pyserial at /usr/lib/python3/dist-packages, owned by OS
Successfully installed pyserial
Cleaning up...

 

さあ、恋の行方は如何に。

 

今日は、思い切ってヘビ使いになり切って、Rapiro 君のハートをガブリと掴んじゃえ!

ということで:

 

python2   (python3 だとエラーになった)

import serial

ser = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10)

ser.write("#M2")

 

「プイプイっと呪文を投げかけたら、後ずさり(#M2)され、プイってされちゃった」ってオチを用意していたが、うんともすんとも言わず、完全にシカト状態。

きっつ~

 

パイソンなみの迫力で迫りたかったけど、えせヘビ使いじゃダメみたい。

 

どうしよ?

愛は本物? もっと迫りたい その2の巻

この愛は本物か?

Carrot stick の代わりに Joystick をぶら下げて、Rapiro 君に猛チャージ!

 

<メモ>

前回までで、PS4 コントローラーの Bluetooth 接続に成功したが、コントローラーからの各種入力をきちんと認識できるか検証。

下記 pygame.joystick サイトの example code を試してみる。

pygame.joystick — Pygame v1.9.2 documentation

例のごとく PuTTY で Rapiro に SSH 接続した後、nano joystick.py でファイルを作成。python joystick.py で実行。すると、下記のエラーが:

pygame.error: video system not initialized

 

下記コードを挿入すべきとの記事あり:

import os
os.environ["SDL_VIDEODRIVER"] = "dummy"

 

しかし解決に至らず。どうやら権限が怪しいと考え、sudo で実行:

sudo python joystick.py

 

エラー解消。ボタン入力に反応するのが分かった。なお、Ctrl + C でストップ。

しかし、GUI の部分が確認できないので、色々と調べて試した結果、TightVNC サーバで解決。

下記サイトが参考になった:

Raspberry Pi で TightVNC サーバ | Raspberry Pi

 

ラズパイ側で vncserver を立ち上げ、Windows 側から VNC Viewer を使ってアクセスする。

ただし、この構成で joystick.py をうまく走らせるためには、vncserver を sudo で起動しないといけなかった。

 

現状での流れをまとめる

PuTTY を使い、pi で Rapiro にログイン

sudo vncserver

VNC Viewer の exe ファイルを実行(Temp フォルダ内)

192.168.100.104:1

パスワード入力(KU)

コントローラーの接続

LXTerminal の起動(ユーザー名に注目!)

python joystick.py

コントローラーからの入力を全て認識してる!

Ctrl + C で中止

sudo halt

Rapiro パワーオフ

 

あぁ、疲れた!