趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。※サイト移転しました(tomono.eleho.net ⇒ tomono.tokyo)
RSS icon
  • Python2.7のプログラムをexe化する

    投稿日 2018年 6月 11日 コメントはありません

    次に、Python2.7で作ったプログラムを配布用にexe化してみます。
    まず、仮想環境を作ります。

    次に、py2exeをインストールします。試しにpipでやってみると、

    ということで、pipでインストールできるpy2exeはpython3.3以降が必要、ということでエラーになります。ですので、sourceforgeから2.7用のインストーラをダウンロードしてきて実行します。インストーラはexe形式のGUIになっていて、デフォルトでは大元のsite-packagesの下にインストールされるようです。

    exeに変換するにはセットアップスクリプトが必要なようですので、まずは以下の内容で作成しました。

    今回は、メインのスクリプト(処理が始まるところ)は main.py なので、main.py を指定。bundle_filesに1を指定すると、生成したexeファイルにランタイムdllを含めてくれるので、配布が楽になります。(代わりにサイズが大きくなります)

    自作のログ解析ツールをLOGというサブディレクトリにソースコードを一式置いてexe化してみました。

    それほど時間がかからずに処理が終わり、buildとdistというサブディレクトリができて、distの下にmain.exe という実行ファイルが作成されていました。今回の場合はサイズは6MBほど、できた実行ファイルを実行してみると、特に問題なく動作しました。

    ということで、意外にあっさりexe化に成功しました。


  • Windows10にPython環境を構築

    投稿日 2018年 6月 10日 コメントはありません

    訳あって、Windows10(たまたま32bit版)上でPythonの環境を構築しています。
    で、Python2.7系とPython3系を同時に使いたいのと、Pythonの仮想環境を利用したい(作ったスクリプトを他人に使わせるには必要なパッケージが明確になってないといけない)ので、いろいろ調べながらやってます。

    1.Pythonのインストール

    まず、Python3系をインストーラを使ってインストールします。インストール時には「Add Python to environment variables」のチェックは外しておきます。py.exeに起動するPythonを選ばせるためみたいです。

    次に、Python2系をやはりインストーラを使ってインストールします。インストール時には「Register Extensions」を外します。

    インストールできたかどうかは

    としてそれぞれPython2系、Python3系が起動できているか確認します。

    2.virtualenvのインストール

    Python2系用の仮想環境を作成するvirtualenvをインストールします。

    デフォルトの文字コードがasciiだと失敗するようなので、デフォルトの文字コードを変更します。C:\Python27\Lib\site-packages の下に、sitecustomize.py という名前で以下のファイルを作成します。

    作成したら、反映されていることを確認します。

    次に、pipをバージョンアップします。

    次に、virtualenvをインストールします

    3.virtualenvを使ってみる

    早速Python2.7の仮想環境を作ってみます。

    ということで、エラーになってしまいます。で、エラーの原因はまた「UnicodeDecodeError」です。
    原因は、どっかにあるvirtualenv.pyの中で文字コードがascii決め打ちになっているsite.pyを仮想環境の中に展開して、それを使ってしまうために起きているように見えます。
    いろいろやってみると、virtualenvを再実行しても一旦ディレクトリを消したりはしないようですので、これを逆手にとって、一度実行してエラーになってから、sitecustomize.py をコピーしてやるととりあえず最後まで処理が進むようです。
    具体的には、上記の例の場合、エラーになってから、sitecustomize.py をコピーしてきてから再度 virtualenv を起動します。(注:そんなことをしなくてもいい方法がありました・・・後のほうに書いてあります

    ということで、旨くいきました。仮想環境への移行も

    でうまくいくようです。
    この上で、scriptsフォルダの下にあるactivate.batを動かして仮想環境に移行後、python2用に作成したスクリプトを動かしてみましたが、無事に動作しました。

    直後に追記)
    こんな回りくどいことをしなくても、–system-site-packages と付ければOKのようです。
    (下記1行目がその例です)

    4.venvを使ってみる

    Python3系用の仮想環境のvenvを使ってみます。こちらはpython3系には標準で入っているので簡単です。使い方はvirtualenvとほぼ同じ。

    でPython3系が動くことが確認できました。


  • esp8266用の環境を構築する(続き)

    投稿日 2015年 4月 10日 コメントはありません

    ESP8266用の環境構築の続きです。

    7.MicroPythonをビルドしてみる

    ExampleはMakefileが複雑すぎる、ということでESP8266用のMicroPythonをビルドしてみました。

    1)ソースコードのダウンロード

    gitでダウンロードしてきます。

    2)ビルドしてみる

    makeしてみます。

    ということで、ヘッダファイルが見つからないようで、エラーになってしまいました。

    3)原因調査とMakefileの修正

    このファイルはSDKの中に含まれているようです。

    ~/esp-open-sdk ディレクトリの下では、SDKのインストール時に sdk から esp_iot_sdk_v0.9.5 へのシンボリックリンクが張られているので、Makefileの冒頭にあるESP_SDKの定義を以下のとおり修正します。(コメントアウトしたのが修正前の内容)

    4)ビルドの続き

    ビルドの続きを行います。

    無事にビルドができました。

    8.esptoolの準備

    ESP8266のROM書き換えのためのツールである esptool も ~/esp-open-sdk/esptool の下に準備されます。

    ESP8266との接続の方法はこのディレクトリ内の README.md に記述されています。

    ということで、ESP8266とUSB-UARTモジュールの間を以下の結線をします。

    • CH-PDをRTSに接続
    • GPIO0をDTRに接続
    • GPIO15をGNDへプルダウン
    • GPIO2を3.3Vへプルアップ

    この接続をしておけばesptoolが勝手にESP8266をブートローダモードに移行させてくれるようです。
    <esptoolsの参考情報>
    https://testpypi.python.org/pypi/esptool/0.1.0

     9.Hack a Dayで発見した記事

    Hack a DayでESP8266に書き込む方法が載ってました。

    http://hackaday.com/2015/03/18/how-to-directly-program-an-inexpensive-esp8266-wifi-module/


  • MicroPythonをビルドしてみた

    投稿日 2015年 3月 19日 コメントはありません

    MicroPythonをUbuntu上でビルドしてみました。

    まあ、特に難しいところはなくビルドできちゃいました。

    1.ソースを持ってきます

    なんのことはなく、gitコマンドで持ってきます。

    2.ビルドします

    unixディレクトリに移動して、makeするだけです。

    一部ヘッダがないと怒られてしまいました。調べてみると、libff-devパッケージに含まれるヘッダファイルのようです。

    パッケージを追加して続けます。

    気を取り直してmakeするとあっさり完了しました。

    3.試しに動かしてみる

    ドキュメント通りに動かしてみます。

    quit()では終了できず、Ctrl-Dで終了させます。

    4.テストにかけてみる

    これもドキュメント通りに。

    あっさり動きました。


  • USB LCDモジュールの製作

    投稿日 2013年 10月 12日 コメントはありません

    PIC18F14K50を使ってUSBで接続・制御するグラフィックLCDモジュールを作ってみました。

    OLYMPUS DIGITAL CAMERA

    LCDモジュールは手持ちの秋月の128×64のグラフィック液晶です。

    OLYMPUS DIGITAL CAMERA

    PIC18F14K50では端子が不足するので、74HC273(Dラッチ)を使って制御信号をラッチしてからLCDモジュールのデータ線に信号を与えています。

    OLYMPUS DIGITAL CAMERA

    この74HC273はパーツ箱に眠っていたもので、デートコードは8820でした。つまり1988年の第20週ですから25年以上前の1988年5月下旬頃に製造されたものということになります。無事に動くか少し不安ではありましたが・・・。

    OLYMPUS DIGITAL CAMERA

    裏側はこんな感じでぐちゃぐちゃになってしまいました。本当はLCDは180度回した形で取り付けたかったのですが、このLCD、図面の右側から端子が振ってあって、思いっきり間違えてしまいました。それで急遽LCDの方を回して、コネクタをもう一つつける形にしてしまいました。

    ファームウェアは例によって /dev/ttyACM0 としてUSBシリアルとして認識されるようになっていて、液晶モジュールへの制御信号とデータの繰り返しで垂れ流すとそのままLCDモジュールをPICが制御するようになっています。PC側はPythonで記述してあって、一旦GDライブラリを使ってビットマップ上にTrueType(のビットマップフォント)を展開した後、LCD用のコマンド列を生成するようになっています。LCDにはnaga10フォントで半角24文字×6行の表示ができるようになっています。


  • TwitterのストリーミングAPIを試してみた

    投稿日 2013年 9月 3日 1つのコメント

    Twitterからリアルタイムに情報を得るStreaming APIを試してみました。

    として、パッケージ管理ツール pip をインストールした後、tweepy をアップグレードしました。その後、キーワードを含む tweet を入手するスクリプトをいろんなところを参考にしながらなんとか作りました。

    15~27行目がデータ受信時の処理で、データを分析してユーザー名やscreeen_name、tweetの内容などを表示します。29行目からが認証で、34行目でstreaming apiを呼び出しています。
    39行目でフィルタの内容を設定していて、ここでは日本語のTweetで、「AKB,HKT,NMB」を含むものをキーワードとしています。キーワードは日本語のようなスペース区切りではない言語では正常に動作しないようです。

    同じ処理は、on_data ではなく、 on_statusを使うとJSONの解析もTweepy側でやってくれるようで、on_status版も上げておきます。

    取得できるデータは、あるtweetを参考に分析してみたところ、

    というような感じで、ユーザー名などは入れ子になったデータ構造になっていますので、on_data版ではソースの20行目のように一旦’user’データを取り出しています。

     


  • 環境情報をRaspberry PiでTweetしてみる

    投稿日 2012年 9月 16日 コメントはありません

    いろいろネタが揃ってきたので、 Raspberry Piで環境情報をつぶやかせてみることにしました。

    まず、環境を取得するハードウェアは、以前作った気圧計・温湿度計を使います。LCDの表示がついていますが、とりあえずはそのままにしておきます。Arduinoベースのこの気圧計・温湿度計は、5秒ごとに気圧、温度、湿度を測定し、9600bpsでUSBシリアルに送信してきます。

    続きを読む »


  • Pythonでシリアルポート操作

    投稿日 2012年 9月 15日 コメントはありません

    ArduinoベースのデバイスをUSB経由で操作するにはシリアルポートとして操作するのが一番お手軽です。
    そこで、こんどはシリアルポートの操作をPythonで行う方法を試してみました。

    続きを読む »


  • Twitter用Pythonライブラリのtweepyを試してみました

    投稿日 2012年 9月 14日 コメントはありません

    Raspberry Piからツイートする方法を調べるため、Pythonライブラリのtweepyを試してみます。

    続きを読む »


  • PythonでUSBのパイプを扱う方法

    投稿日 2012年 7月 18日 コメントはありません

    Pinguino(PICマイコンでArduinoのようなことをするもの)について調べていたら、

    http://wiki.pinguino.cc/index.php/Interfacing_with_Python

    にUSBのパイプをPythonで扱う方法が出ていた。

    PinguinoではUSBでホストとのデータ送受信ができるようであり、そのための例として載っている。
    (ちなみにPinguinoは秋月で売っている PIC32MX220F032BのQFP44ピンバージョンであるPIC32MX220F032Dを搭載したバージョンがOLIMEXから販売されている)

    ここによれば、

    On Computer Side


    という簡単な記述で扱えるらしい。