Various tips

しがない院生の開発日記

PySerialのデータをリアルタイムで見たい

visual studio使いたくないし、どうにかjupyterでどうにかならないかなあと思った矢先以下のサイト様にコードが
takeshid.hatenadiary.jp

ありがたいありがたい。。。
転記の様に使っていいのかわからないですが、上記のサイト様のをベースにUARTシリアル通信バージョンを組んでみました。

# -*- coding:utf-8 -*-

%gui qt
#プロット関係のライブラリ
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
import serial
import sys

class PlotWindow:
    def __init__(self):
        #プロット初期設定
        self.win=pg.GraphicsWindow()
        self.win.setWindowTitle(u"リアルタイムプロット")
        self.plt=self.win.addPlot() #プロットのビジュアル関係
        self.plt.setYRange(-1,70000)    #y軸の上限、下限の設定
        self.curve=self.plt.plot()  #プロットデータを入れる場所
        
        self.ser = serial.Serial(port="COM3",baudrate=115200)
      
        #アップデート時間設定
        self.timer=QtCore.QTimer()
        self.timer.timeout.connect(self.update)
        self.timer.start(10)    #10msごとにupdateを呼び出し

        #UART受信データ(data)
        self.data=[0]

    def update(self):            
        #データの読み取り
        ReceData = self.ser.read(2)
        #16進数2桁のデータ2つを一気にデコード
        ReceData = np.frombuffer(ReceData,dtype=np.uint8)

        self.data.append(256*ReceData[0]+ReceData[1])
        self.curve.setData(self.data)   #プロットデータを格納
        #self.ser.write(bytearray([70])) #デバック用送信器

if __name__=="__main__":
    plotwin=PlotWindow()
    if (sys.flags.interactive!=1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
   



GUI部分に関しては引用先サイト様にお任せして、シリアルのことをちょっと書いておきます。

環境はwindows10を使って動作させています。
ので、serial.Serial(port="COM3"... と、portにはこのような形で指定しています。
ubuntuとかだと、port="/dev/ttyACM0"みたいな感じになるかと。

また、今回はstm32f401reを使ってUART越しにPCへデータを送信しています。
送られてくるデータは16進数2桁のデータなのでそれをnumpyを用いてデコードします。エンディアン化させているので2つ同時に送られてくるので余計にnp.frombufferがすごいよい働きをしてくれます。(生データを直接引数にして10進数に直してくれるため。)

また、jupyter上での設定として、

%gui qt

を書いておいてあげると、notebook上でもインタラクティブに使えるようにします。
こんな感じです。
結局、引用先サイト様がすごいといったところです。

jupyter notebookファイル(.ipynb)の修復

部屋を出て戻ってきたらそこには150MB近くある謎の.ipynbファイルが。。。。。。。

 

記憶がないのですが、jupyter開きっぱなしにしておそらくそのまま放置してしまったせいで、エラー吐かれ続けてそれがノートブックに全部記載されて保存されてたっぽいです(涙)

おまけに重すぎて開けず、完全に壊れた状態。。。

 

Atomで.ipynb開いて無理矢理エラーコード削除してたのですが、あまりに膨大で削除しきれず。。。

 

そこで、以下の方法で解決しました。

①.ipynbファイルをコピーして、コピーデータの内容を全て削除

②オリジナル部分から要る部分だけをコピー先にピックアップしていく

③完成したらオンラインのjson visualizerに突っ込んでデバッグ(ここがみそ)

④③で使っているオンラインエディタ上で悪さをしている部分を修復して、完成したテキストをAtomのコピーデータに貼り付け

 

以上で修復完了。

どうやらjupyterのデータはjson形式かかれているようなので、jsonデバッガがあれば修復可能っぽいです。

開けなくなってどうしようか頭抱えましたが、何とか乗り切れました。

めでたしめでたし。

 

 

 

Ubutntu 18.04にSW4STM32を入れる

サポートがUbuntu 14.04って放棄されてませんか、stさん。。。

ということで、試してみたかったのでインストールしていきます。

1.
まず
www.openstm32.org
にアクセスしてregisterします。
(httpアクセスでセキュアじゃないってエラーがブラウザから死ぬほど来ますが)
ログインできたら、ホームに戻って

Step 1: Explore

    Search for Content
    Visit Wiki Pages
        You can start from Wiki Home 
    Read Blogs and Forums
    Look at the FAQs
    Install System Workbench for STM32 - Bare Metal Edition
        Instructions are provided here
        You can download the System Workbench for STM32 installer from the download area. 

となっている部分のケツのdownload areaにアクセスします。
アクセスしたら
install_sw4stm32_linux_64bits-v2.6.run
をダウンロードします。

2.
cd コマンドを使ってダウンロード先まで移動した上で、

chmod +x  install_sw4stm32_linux_64bits-v2.6.run
sudo ./install_sw4stm32_linux_64bits-v2.6.run -f

を実行します。
chmodは実行権を得るため、./ -fは強制的にインストールするためです。
ここからコンソール画面でインストールするけどええか?みたいな画面がでてくるのでひたすら O(オー) or 1 or y
を押していきます。

3.
インストール完了するとデスクトップにショートカットを作ってくれますが、ubuntu 18.04さんは全く信用してくれないので実行できません。
そこで、端末から実行します。

cd /
sudo su
cd root/Ac6/SystemWorkbench
./eclipse

と実行すればSW4STM32の実行完了です。

4.
つづいて、CubeMXを入れるためにEclipseプラグインをインストールします。
下記のstサイトにサクセスして、ダウンロードを完了させます(要my st アカウント)
www.st.com
インストールを終えたら解凍して、SW4STM32(eclipse)の
Help->Install New Software
から上記の解凍ディレクトリをしていしてやると自動で入れてくれます。
あとは
Window->Show view->Other->Other
からeclipse内でCubeMXを開いて終わりです。
参照:
ropot.hatenablog.com

5.
CubeMXからGenerate Codeでプロジェクトを作成します。
Toolchain/IDEはIARの場合だとEWARMですが、今回はSW4STM32を選択します。
これを選択してプロジェクトを作成すると、SW4STM32で開くかどうかを確認されるので、YesをクリックするとSuccessfuly importedと表示されてeclipse側でコードを表示できます。

SW4STM32入れてる時点でST Linkも入れてくれてるのでこれで書き込みできます(Lチカ実証済)

windowsのCubeMXでプロジェクト作るとBlue PushButtonとかLD2とかデフォルトで設定されてるのにこの環境だと設定されない?
とりあえずwindowsiocファイル作ってそれをSW4STM32で開けるようにしてみようかなとか思います。

Kitematicをubuntuにインストール

まずは
github.com
からzipファイルを保存。
(現段階で最新のヴァージョンが0.17.3)

そこから解凍すると、
Kitematic-0.17.3-Ubuntu > dist > Kitematic_0.17.3_amd64.deb
とファイル構造がなっているので、distまでディレクトリを移動して、

sudo gdebi Kitematic_0.17.3_amd64.deb

とするとインストール完了。

そこから、端末で

sudo kitematic

とするとkitematicの起動完了。
sudoなしで起動するとDockerログインもできなければDockerの環境も認識してくれないエラーに陥るので注意。
(これを書いている中の人は陥りました。
github.com
このissueの最後にSuper Userでやれ!
って書いてあったのを見て救われました。

WSL(Ubuntu 18.04)でdocker 入れて大変な目にあった

紆余曲折を時系列順に書いていきます。

1.
qiita.com
このサイトを参考にしてubuntuで入れるが如くGPG鍵を使うことに。
しかし、うまくいかず。
どうやらWSLから使うためにはDocker for Windowsが必要だとかいう記事を見つけてこの段階でインストール。

2.
qiita.com
の記事を参照して1の代わりにdocker.ioをインストールすることに。

3.
daemonが動かないっぽい。
qiita.com
どうやらDocker for Windowsでネットワーク設定を行った後にWSL上のDockerの設定ファイルもいじらないといけないんだとか。

4.
デーモンが動いてようやく遊べると思いきや、ネットワークエラーでdocker pullができない。
maku77.github.io
を参照。
WSL上のDockerをCUIでいじる。
色々再起動してから、

sudo cgroupfs-mount
sudo usermod -aG docker $USER
sudo service docker start

でようやく起動完了。

5.
ネットワークもつながりようやくおれの時代きた!!と思いきや
"docker : failed to register lyaer"なるエラーが。
ぐぐってみると、
qiita.com
こんな記事が。
せっかくdocker.ioでがんばったのに結局無意味かよ。。。
というところで、apt rm docker.ioをしてから上記記事の通り、docker ce 17.09.0を入れることに。

6.
これでようやくdocker pullもできて一安心

といったところです。疲れた。

その他、dockerインストール直後とかそもそもDocker is not runningとか言って、service docker startしても動き出さないことがしばしばあったので、Windows自身を再起動させたり、Docker for Windowsをrestartさせてみたり、なんだり。。。。

Ubuntuコマンド自分用(随時更新)

<ディレクトリのコピー>

cp -r コピー元ディレクトリ コピー先ディレクトリ


<ディレクトリの削除>

rm -r 削除対象ディレクトリ


<root権限>

sudo su

権限取得

exit

権限解除


ディレクトリのファイル確認>

ls -l

<使用メモリ確認>

free


<サービス開始/状態確認/再開>

service "アプリ名" start/status/restart

<インストールされているソフトウェアの確認>

dpkg -l

一覧表示

dpkg -l | grep "condition"

絞り込み検索

<ファイル書き込み権限変更>

chmod 777 "ファイル名"

4 読み込み 2 書き込み変更 1 実行
で、左から所有者、グループ、その他
なので、777は所有者、グループ、その他(要は全員に)ファイルアクセスの全権付与を行う という意味。

Docker for windows とかKitematic(on Windows)のプロキシ

結論から言うと、自分で察していた通りプロキシが原因でした。(WSLの時もプロキシ設定がされていなくてapt updateできなかったり、やっぱりプロキシが悪さを)

Docker for Windowsでプロキシを設定するためには、
f:id:tyryuy:20181012130510p:plain

タスクトレイ(っていう名前初めて知りました)にひっそりたたずむクジラさんマークを右クリックして、settingsに入ると設定できます。

で、Proxiesのところに

http://~~~:port number

みたいな感じで打ち込むと設定完了です。
晴れてrun hello-worldもできました。

あと、Kitematicもプロキシのせいで動きませんでした。
以下のサイト様の方法でどうにかなりました。
www.cresco.co.jp
まさか、Kitematicのセッティングからいじるかと思いきや、コマンドプロンプトからの起動でねじふせなきゃいけないとは。。。