mieki256's diary



2017/09/04(月) [n年前の日記]

#1 [python][pi3d] pi3dでハローワールド

せっかく Windows上でも pi3d が動くようになったので、少し使い方を調べてみたり。

球を出す。 :

_pi3dの公式ドキュメント に従って、ウインドウを生成して球を出してみたり。こんな感じに。

helloworld_ss.png

一応、ESCキーを押したら終了するようにしてある。じゃないとスクリプトを簡単に終了させられないので。

ソースは以下。

_helloworld.py
u"""
pi3d Hello World.

球を生成して描画するサンプル。
ESCキーで終了する。

Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import pi3d

# ウインドウ生成
display = pi3d.Display.create(w=640, h=480,
                              frames_per_second=60)

# 球を生成
ball = pi3d.Sphere(z=5.0)

# キーボード取得用クラスを生成
keys = pi3d.Keyboard()

# メインループ
while display.loop_running():

    # 球を描画
    ball.draw()

    if keys.read() == 27:
        # ESCキーが押されたらループを抜けて終了
        keys.close()
        display.destroy()
        break

python helloworld.py で実行できる。

Windows10 x64上だけではなく、以下の環境でも同じように表示された。
  • Ubuntu 16.04 + Python 2.7.12
  • Raspberry Pi3 + raspbian stretch + Python 2.7.13

少し解説。 :

pi3d を使うときは、import pi3d を最初のあたりに書いて、「このスクリプトはpi3dを使うよ」とPythonに教えてやる。

上記スクリプトの最初のほうに、from __future__ import なんたら、みたいな行が列挙されてるけど。これは、Python 2.7を使いつつも Python 3.x っぽく動かすための指定らしい。コレを入れとけば Python 2.7 と Python 3.x の両方で動くスクリプトが書けるのだろう。たぶん。Pythonってよく知らないから自信ないけど。

display = pi3d.Display.create(w=640, h=480, frames_per_second=60) で、ウインドウを生成。w,h が、ウインドウ横幅と縦幅の指定。frames_per_second で最大フレームレートを指定。この場合、640x480ドット、60FPSのウインドウを作れ、と指定してる。

フレームレートを指定しないと、CPUが全力でループを回す状態になって、その分、他の処理がおろそかになるのだとか。バックグラウンドで音楽を鳴らしつつ、みたいなことをしたいときはフレームレートを指定したほうがいいよ、とドキュメントには書いてあった。

ball = pi3d.Sphere(z=5.0) で、球を生成。pi3d.Sphere(x=0.0, y=0.0, z=0.0) といった感じの指定で、位置を設定できるらしい。

if keys.read() == 27: は、ESCキーが押されたかチェックしてる。…いきなり直接数値を書いて比較してるあたりがなんだか引っ掛かるなあ。

そのままいきなりスクリプトを終了させると、キー入力関係の不具合が発生する時があるらしいので、keys.close() を呼んでから終了したほうがいいかも、みたいなことが公式ドキュメントに書いてあった。pi3d_demos のサンプルスクリプト群も大体そんな感じの記述になってるっぽい。

display.destroy() でウインドウを破棄、してるのかな。たぶん。

球を動かしてみる。 :

静止画ではつまらないので、球を動かしてみたい。sinカーブで位置を変えてみる。

helloworld2_ss.gif

これも、Windows10 x64、Ubuntu 16.04、Raspberry Pi3上で同じように動いた。

ソースは以下。

_helloworld2.py
u"""
pi3d Hello World.

球を生成して描画するサンプル。位置を動かしてみる。
ESCキーで終了する。

Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20
"""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import math
import pi3d

# ウインドウ生成
display = pi3d.Display.create(w=640, h=480,
                              frames_per_second=60)

x, y, z = 0.0, 0.0, 15.0
x_ang, y_ang, z_ang = 0.0, 0.0, 0.0

# 球を生成
ball = pi3d.Sphere(x=x, y=y, z=z)

# キーボード取得用クラスを生成
keys = pi3d.Keyboard()

# メインループ
while display.loop_running():

    # sinカーブで位置を動かす
    x_ang += 3.0
    y_ang += 4.5
    z_ang += 0.8
    x = 5.0 * math.sin(math.radians(x_ang))
    y = 3.0 * math.sin(math.radians(y_ang))
    z = 7.0 * math.sin(math.radians(z_ang)) + 15.0

    # 球の位置を設定
    ball.position(x, y, z)

    # 球を描画
    ball.draw()

    if keys.read() == 27:
        # ESCキーが押されたらループを抜けて終了
        keys.close()
        display.destroy()
        break

python helloworld2.py で実行できる。

#2 [ubuntu] x11vncを使うとテンキーが送れない

Windows10 x64 + VNC viewer から、Ubuntu 16.04 + x11vnc にアクセスして、デスクトップ画面を表示して操作してたのだけど。Windows側でテンキーを押しても正常に送られてないことに気づいたり。ちなみに Windows側の VNC viewer は UltraVNC同梱の Viewer。

Ubuntu側で vncserver を立ち上げて、そこにアクセスした場合は、テンキーもちゃんと送れる…。ということは VNC viewer の設定がおかしいわけではなく、x11vnc のほうで設定が必要なのかな…? ググってみたけど解決策が見つからず。

まあ、テンキーが使えなくても、どうにかなるかな…。

TigerVNCをアンインストール。 :

どうも時々 VNC viewer が落ちてしまう。もしかして、Ubuntu側で TigerVNC を使ってるのがよろしくないのかな。公式リポジトリに入ってないパッケージだし、ちょっと不安定だったりする可能性がありそうな。や、どこが原因で落ちてるのか分からないので、濡れ衣かもしれんけど。

とりあえず TigerVNC をアンインストールして、代わりに vnc4server をインストールしてみたり。後者で安定動作してくれたらいいのだけど、さて。
sudo aptitude purge tigervncserver
sudo aptitude install vnc4server

元々 TigerVNC をインストールしたのは、x0vncserver を試してみたかったから、だけど。vnc4server にも、x0vnc4server が入っていて、インストールすると x0vncserver として割り当ててくれるので、x0vncserver を使いたくなった時も困ったりはしないだろう…。

#3 [ubuntu] Ubuntu機に winbind をインストール

Ubuntu 16.04機からWindows10 x64機のホスト名が見えない。winbind をインストーすることで解決、という事例を見かけたので試してみたり。
sudo aptitude install winbind libnss-winbind

sudo vi /etc/nsswitch.conf
hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname
↓
hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname mdns4 wins

sudo service winbind restart

ping Windows機ホスト名、が通るようになった。

以下、参考ページ。

_Winbind をインストールしたのに NetBIOS nameでアクセスできない on Ubuntu 13.10 | 穀風
_まさおのブログ (表): Ubuntu で wins の設定

Ubuntu側からWindowsの共有フォルダにアクセス。 :

Ubuntu 16.04側から、Windows10 x64上の共有フォルダにアクセスしたい。cifs-utils なるパッケージをインストールすればマウントできるらしい。試してみたり。
sudo aptitude install cifs-utils
sudo mkdir /mnt/windows

以下でマウント。パスワード指定は省略可能で、その場合コマンドを実行した段階で尋ねてくるのだとか。
sudo mount -t cifs -o username=Windowsユーザ名,password=Windowsパスワード //Windowsホスト名/共有フォルダ名 /mnt/windows
or
sudo mount.cifs -o username=Windowsユーザー名 //Windowsホスト名/共有フォルダ名 /mnt/windows

これで実際にマウントできた。

上記の場合、所有者が root:root になる。変更した状態でマウントしたいなら、uidとgidを指定すればいいらしい。
sudo mount.cifs -o username=Windowsユーザー名,uid=ubuntu,gid=ubuntu //Windowsホスト名/共有フォルダ名 /mnt/windows

以下、参考ページ。

_Ubuntu から Windows の共有フォルダをマウントして利用する - Qiita
_【cifs-1】UbuntuからWindowsの共有フォルダを手動マウントする | インフラエンジニアのメモ

#4 [pc] Bluetooth接続のキーボードが欲しいのだけど

Raspberry Pi3 に一々ワイヤレスキーボードの子機を差すのが面倒臭くなってきた…。Raspberry Pi3はBluetoothを内蔵してることだし、Bluetooth接続のキーボードが欲しくなってきた…。

しかし…。 てな希望を元に探してみたら、これがまったく選択肢が無くて。

いっそ、仮想キーボードを使うという選択肢は…どうだろう…。Bluetooth でマウスだけを接続して…。

_Raspberry Pi の仮想キーボード | Raspberry Pi

以上、1 日分です。

過去ログ表示

Prev - 2017/09 -
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

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project