Cocoonで編集画面が左寄りになる問題。
Cocoonで編集画面が左寄りになる問題。Cocoonを新たに入れたサーバーで発覚。作者のわいひらさんからから修正がでてたのでメモ。
結構深いスレッドの中に記載があったので、その部分だけ以下Cocoon Comunityの投稿の転載:
こちらが上記スレッドにあるgithubのリンク先
このcocoon masterでcocoonを入れ替えたら元に戻った。ありがたや。
« 2020年12月 | トップページ | 2021年2月 »
Cocoonで編集画面が左寄りになる問題。Cocoonを新たに入れたサーバーで発覚。作者のわいひらさんからから修正がでてたのでメモ。
結構深いスレッドの中に記載があったので、その部分だけ以下Cocoon Comunityの投稿の転載:
こちらが上記スレッドにあるgithubのリンク先
このcocoon masterでcocoonを入れ替えたら元に戻った。ありがたや。
WordpressのRepsponsive Lightbox & GalleyでLightbox表示(ページ内の画像をクリックすると拡大画像をポップアップする)を使ってみたくて使い方を調べると、どの説明を読んでも張り付ける画像のリンク先をメディアファイルにするだけ、超簡単!と書いてあるけれども、そのリンク先が見当たらない。
そもそもそれらの説明で参照しているエディター画面が自分のと違う。これはどういうことか???ってなわけで色々とダッシュボード内をあっちこっちと這いずり回ってCocoon設定のエディタータブにGutenbergエディターってのがあってチェックが入っている。つまり、自分が使っている投稿エディタはGutenbergエディターなんだ、と分かった。で、無効化すると旧ビジュアルエディター形式になるとある。そこで外してみた。
そうすると、Lightboxの説明に出てくる編集画面になった。で、説明どおりにメディアを追加をクリックして画像ファイルを選ぶと、、、
添付ファイルの表示先にリンク先が現れた。ここでメディアファイルを選択してプレビューするとLightboxが動いた。なるほど、こういう事だったのね。
ただし、Gutenbergエディターではなくて旧型式ビジュアルエディターでは以下の構成が表示できず、ギャラリー映像もカラム表示も全部縦一列になってしまった。
旧型式エディターで作成したページの各要素はGutenbergエディター環境ではその部分だけ旧式エディター機能で編集できる。この状態でこのページを公開してもLightboxは機能する。
上記のブロックへ変換をクリックするとGutenbergエディターのブロック形式に変換される。この状態でこのページを公開してもLightboxは使えるままになっている。
結論:Lightboxを使いたい場合はGutenbergエディターをオフにして旧型式エディターでメディアを追加して、その後Gutenbergエディターに戻せばよい。
現在制作中のホームページでタブを使ってみたくなった。ちょっと使い方が複雑(直感的には分かりにくい)だったので備忘録。
まずインストールしたPlug-inはWP Tabs。選択肢は沢山あるようだったけれど、Wordpress使いと思われる方の投稿などを読んで、こういう方が手間をかけて投稿してるのだかそれなりに良いのだろうとの判断。
以下はTabs Groupsを選択した場合。既に工作日誌という名前でTabs Groupを登録した後の画面コピー。ここで重要なのはShortcode。これが後からモノを言う。
Add New Tabをクリックすると新しいTabが追加できる。工作日誌には3つのタブを追加した。なお、タブ形式はHorizontalを選んでいる。
このタブを設置する固定ページの編集をおこなう。予め上記のShortcodeをコピーしておいてからタブを置きたい場所でペーストを実行すると、自動的にショートコードとして張り付けを実行してくれる。
以下が設置したタブ部分のプレビューの結果。うれしいのはちゃんとテーマに合わせてレイアウトされていること。
これでホームページがちょっぴりリッチになった。
最近TWELITEでPySimpleGUIを使っている。なんだかPython2.7では具合が悪かった、というかフツーにPySimpleGuiをインストールするとPython3用が入ってくる。Python2.7はpysimplegui2.7をインストールせよ的な情報が幾つもあるし、Python2.7でPySimpleGUIを使おうとして困っている書き込みの多々ある。
で、Raspberry Pi 4のpythonはどうなっているか確認したら2.7.16だった。Python 3も入っていてPython 3.7.3だった。このDefaultのpythonをPython 3に切り替えたい。
Debianではalternativesというコマンドがある。どうやら、指定したコマンドのシンボリックリンクを作って特定のディレクトリに保存しおき、このコマンドが発行されたらそのシンボリックリンクを呼び出すようだ。このシンボリックリンクは同じコマンドに対して複数登録できて、その中のどれを選ぶかも決められる。つまり、今回のようにpythonコマンドが呼ばれた際に2.7を呼び出すか、3.6を呼び出すかをここで管理できるわけだ。
使うコマンドは以下になる。
update-alternative --install
このコマンドの使い方は以下のようだ。
--install link name path priority [--slave link name path]...選択肢のグループをシステムに追加する。link は master リンクの一般名、 name は alternatives ディレクトリにおけるシンボリックリンクの名前、 path は master リンクとなる選択肢の名前となる。
で早速実行した。
以下、上記コンソール表示内容の解説。
pi@raspberrypi:~ $ python --version <- Defaultは2.7.16
Python 2.7.16
pi@raspberrypi:~ $ python3 --version
Python 3.7.3
pi@raspberrypi:~ $ ls -l /usr/bin/python*
lrwxrwxrwx 1 root root 7 3月 5 2019 /usr/bin/python -> python2 <- ここのディレクトリではpython2にシンボリックリンクが張られている
lrwxrwxrwx 1 root root 14 3月 5 2019 /usr/bin/python-config -> python2-config
lrwxrwxrwx 1 root root 9 3月 5 2019 /usr/bin/python2 -> python2.7 <- python2.7へのシンボリックリンク
lrwxrwxrwx 1 root root 16 3月 5 2019 /usr/bin/python2-config -> python2.7-config
-rwxr-xr-x 1 root root 154 12月 30 2018 /usr/bin/python2-pbr
-rwxr-xr-x 1 root root 2984816 10月 11 2019 /usr/bin/python2.7 <- python2.7の実態
lrwxrwxrwx 1 root root 36 10月 11 2019 /usr/bin/python2.7-config -> arm-linux-gnueabihf-python2.7-config
lrwxrwxrwx 1 root root 9 3月 26 2019 /usr/bin/python3 -> python3.7 <- python3.7へのシンボリックリンク
lrwxrwxrwx 1 root root 16 3月 26 2019 /usr/bin/python3-config -> python3.7-config
-rwxr-xr-x 2 root root 4275580 12月 21 2019 /usr/bin/python3.7 <- python3.7の実体
lrwxrwxrwx 1 root root 36 12月 21 2019 /usr/bin/python3.7-config -> arm-linux-gnueabihf-python3.7-config
-rwxr-xr-x 2 root root 4275580 12月 21 2019 /usr/bin/python3.7m
lrwxrwxrwx 1 root root 37 12月 21 2019 /usr/bin/python3.7m-config -> arm-linux-gnueabihf-python3.7m-config
lrwxrwxrwx 1 root root 10 3月 26 2019 /usr/bin/python3m -> python3.7m
lrwxrwxrwx 1 root root 17 3月 26 2019 /usr/bin/python3m-config -> python3.7m-config
alternativeへの登録を確認。pythonは未登録。
pi@raspberrypi:~ $ sudo update-alternatives --list python
update-alternatives: エラー: python の alternatives がありません
python2.7をpriority 1で登録
pi@raspberrypi:~ $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: /usr/bin/python (python) を提供するために自動モードで /usr/bin/python2.7 を使います
python3.7をpriority 2で登録
pi@raspberrypi:~ $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2
update-alternatives: /usr/bin/python (python) を提供するために自動モードで /usr/bin/python3.7 を使います
登録内容の確認
pi@raspberrypi:~ $ sudo update-alternatives --list python
/usr/bin/python2.7
/usr/bin/python3.7
構成内容の確認。優先度が高いpython3.7が自動モードで選択されることがわかる
pi@raspberrypi:~ $ sudo update-alternatives --config python
alternative python (/usr/bin/python を提供) には 2 個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /usr/bin/python3.7 2 自動モード
1 /usr/bin/python2.7 1 手動モード
2 /usr/bin/python3.7 2 手動モード
現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
pythonのバージョンが3.7.3になっていることを確認
pi@raspberrypi:~ $ python --version
Python 3.7.3
pi@raspberrypi:~ $
以上で作業終了。
Raspberry Pi 4にTeamViewerをインストールした。VNCをインストールしてあるけれど、それだとインターネット経由のアクセスができない。まぁ、家の中だけだったらそれで充分ではあるけれども、、、
BluetoothスピーカーでRadikoが聞けるようになったけれど、依然としてモニターやキーボード・マウスをRaspberry Piに接続しないといけないのはうまくない。TeamViewerが使えたら便利だろうなぁって思ってTeamViewerを覗いたらなんとあるではないか!これでインターネット経由でリモートデスクトップが使える。
ダウンロードされたteamviewer-host_15.13.6.armhf.debをインストール。
ドバドバっとコードがインストールされる。インストール途中で以下のダイアログが現れる。
インストールされたTeamViewerはプルダウンメニューのインターネットの下にTeamViewer Hostで登録されている。それをクリックする。
簡易アクセスを許可をクリックする。持っているTeamViewerのアカウント情報を入力する。
メールをスマホで受信した。画面上の「この端末を承認する」をクリックする。
「はい、このデバイスです」を選んで先に進むと完了メッセージが表示される。
以上で設定は完了。Windows PCからRaspberry PiにTeamViewerで入れば、もうRaspberry Piにモニターもキーボードは不要。
らくちん、らくちん。
理由は分からないんだけれど、気が付いたらWordPressのダッシュボードの投稿一覧表示がおかしくなっている。タイトルの幅は1文字分しかなく、えらいことになっている。
先人の知恵に学ぶとどうやら 外観->テーマエディター に入ってfunctions.phpを編集すると良いようだ。先人の知恵を一部手直して、最終行にfunction column_width()を追加した。
コード内容:
add_action('admin_head', 'column_width');
if ( !function_exists( 'column_width' ) ):
function column_width() {
echo '<style type="text/css">
.column-title {
text-align: left;
width:200px !important;
overflow:hidden
}
</style>';
}
endif;
めでたし、めでたし。しかし、こんな事ばかりで本来のサイト作成作業が進まない。。。。。
現在新しいサイトを作成中。今回のサイトはちゃんと作りたいのでSSLをしっかり適用したいと思う。
レンタルサーバー(私の場合はLolipop)で無料SSLをイネーブルにして、WordPressでページアドレスをhttpsに変更した。具体的にはWordPressのダッシュボードの設定->一般設定のサイトアドレスをhttpからhttpsに変更する。WordPress的にはこれでhttpsに切り替わる。各ページに埋め込んである画像ファイルのURLも全部httpsに変更した。これでOKかとおもったら、以下の表示となった。
画像などのファイルが安全ではない、つまりそのリンクがhttpsではないって言っているようだ。
詳細を見ても同じことを言っている。で、詳細を表示をクリックする。
画像と言っているのでメディアタブから画像URLを見てみる。確かに一つある。no-amp-logo.pngが問題のようだ。
新しいサイトでもCocoonを使っている。で、Cocoon設定を見るとAMPタブがある。それを選ぶと、、、確かにAMPロゴのURLがhttpになっている。これをhttpsに変更して保存する。
めでたし、めでたし。
Raspberry Pi 4にBluetoothをつなぎたくなった。最近radikoを聞くことがあるのでRaspberry Piをインターネットラジオにしたくなったわけだ。
Raspberry Pi 4にはbluetoothctlが備わっている。それを使えばペアリングが簡単にできる。とりあえず以下の実行する。私のBluetoothスピーカーBluetooth上の名前はE-91だ。
pi@raspberrypi:~ $ sudo bluetoothctl
Agent registered
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller DC:A6:32:91:F7:F4 Discoverable: yes
[bluetooth]# agent on
Agent is already registered
[CHG] Controller DC:A6:32:91:F7:F4 Discoverable: no
[bluetooth]# scan on
Discovery started
[CHG] Controller DC:A6:32:91:F7:F4 Discovering: yes
[NEW] Device 7E:47:34:4F:D7:0E 7E-47-34-4F-D7-0E
[NEW] Device 6E:0A:C1:FA:2D:8D 6E-0A-C1-FA-2D-8D
[NEW] Device 00:9D:6B:5D:6C:F7 00-9D-6B-5D-6C-F7
[NEW] Device 98:69:A8:49:D7:BB E-91 ←みつかってる
[CHG] Device 6E:0A:C1:FA:2D:8D RSSI: -70
[CHG] Device 6E:0A:C1:FA:2D:8D RSSI: -51
[bluetooth]# pair 98:69:A8:49:D7:BB ←E-91のMACアドレスでペアリング実行
Attempting to pair with 98:69:A8:49:D7:BB
[CHG] Device 98:69:A8:49:D7:BB Connected: yes
[CHG] Device 98:69:A8:49:D7:BB Modalias: bluetooth:v05D6p000Ad0240
[CHG] Device 98:69:A8:49:D7:BB UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 98:69:A8:49:D7:BB UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 98:69:A8:49:D7:BB UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 98:69:A8:49:D7:BB UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 98:69:A8:49:D7:BB UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device 98:69:A8:49:D7:BB UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 98:69:A8:49:D7:BB ServicesResolved: yes
[CHG] Device 98:69:A8:49:D7:BB Paired: yes
Pairing successful
[CHG] Device 98:69:A8:49:D7:BB ServicesResolved: no
[CHG] Device 98:69:A8:49:D7:BB Connected: no
[CHG] Device 98:69:A8:49:D7:BB Trusted: yes
[CHG] Device 98:69:A8:49:D7:BB Connected: yes
[NEW] Device 5E:83:3C:FA:A3:B4 5E-83-3C-FA-A3-B4
[CHG] Device 98:69:A8:49:D7:BB ServicesResolved: yes
[E-91]#
この状態でBluetoothスピーカーとのペアリングは完了している。デスクトップに以下のダイアログが表示される。
けれども音がでない。Raspberry PiのPhone Jackにヘッドホーンを差し込んだらそっちから音がでている。デスクトップ左上のスピーカーアイコンの右クリックでみると、Bluetoothスピーカーにチェックが付いているけれどもそれはどうも関係ないようだ。
先人の知恵を拾い集めて以下を実行した。
その1:
sudo mousepad /boot/config.txt
下の方に以下がある。このdtparam...を以下の通りコメントアウトする。
# Enable audio (loads snd_bcm2835)
# dtparam=audio=on
この設定をしてからリブートするとスピーカーアイコンを右クリックするとアナログオーディオデバイスが消えて、Bluetoothスピーカーだけが残った。これで内蔵オーディオはOFFになったらしい。けれどもBluetoothスピーカーにサウンドが送られない。
その2:
Pulseaudioのインストール。PulseaudioはオーディオアプリケーションとALSA(Advanced Linux Sound Architecture)の橋渡しをするモジュールのようだ。詳しいことを書かれている先人がおられるのでそちらを参照すれば詳しいことが分かる。で、インストールは以下を実行する。
$sudo apt-get install pulseaudio -y
この後、Raspberry Pi起動時にpulseaudioが組み込まれるように、.bashrcを修正する。
$ mousepad ~/.bashrc
一番下の行に移動して、以下を追記する。
pulseaudio --start
ここまで出来たらリブートする。なお、上記でBluetoothスピーカーとベアリングが完了していると、リブートしても自動的にペアリングが行われる。つまりペアリングを自動で復帰する。
さて、Bluetoothスピーカーから音がでるかどうか。ChromiumでYouTubeにアクセスしてNiziUのMusic Videoを再生してみた。
な~ぜ♪
大音響でMake You Happyが始まった(超びっくり)。再生前にくれぐれもBluetoothスピーカーのボリュームチェックを。
タイトルだけ読んでも何の事だか分からないけれど、Raspberry PiにDefaultで設定されている機能を変更する方法について備忘録。
某氏がシェアしてくれたTwitterにてとても興味深いリンクが紹介されていた。
この記事はGPIO1を起動・シャットダウン用の入力信号として使う方法が書かれている。
dtoverlayを使って設定するもので、詳しくはRaspberry Piの/boot/overlay/READMEに書かれている。この記事ではgpio-shutdownを使っている。この設定は/boot/config.txtで記述する。GPIO1入力が起動スイッチとしても使えるようになるそうなので、直近の起動時に読み込んだconfig.txtの設定をRaspberry Piは覚えている(不揮発性メモリーに保存)しているということだ。
今日は備忘録としてここまで。時間をみつけてREADMEを読んでから、いろいろ試してみよう。
Lolipopのレンタルサーバー上にドメイン事に複数のWordPressをインストールしたのでその備忘録。どうやってやれば良いのかちょっと迷ったので。
以下の画面コピーは独自ドメインpathpilot.netが割り当てられているレンタルサーバーに独自ドメインpathpiot.infoが追加された後(つまり一回作業をした後)の画面コピー。ここから同じサーバーに3つ目の独自ドメインを割り当てたい場合は”独自ドメイン設定”ボタンをクリックする。
すると以下の画面になるので、追加したい独自ドメインとその公開フォルダを設定する。必要な作業はこれだけ。
この作業が終わると、どの独自ドメインURLでpingしても同じサーバーから返事が返ってくるようになる。
この後WordPress簡単インストールを選択して、上記で設定したサイトURLを指定するだけでWordPressがインストールされる。
以上で、一台のLolipopレンタルサーバーに複数のWordPressをインストールすることが超簡単に出来た。
めでたし、めでたし。
Pythonコードを毎回Visual Studio Code上で走らせるのも面倒なのでEXE化を行った。環境はWindows 10でPythonは3.7.3。
自分の環境はAnacondaなので(たまたまAnacondaでPythonがインストールされてたPCで色々とやっているので)、condaベースでの作業になる。準備作業は以下のステップの実行となる。
この状態で以下を実行。Anaconda環境でなかったらcondaの代わりにpipを使うことになる。
> conda install pyinstaller
結構沢山のモジュールがインストールされた。インストール後にスクリーンショットを撮ろうとおもったけれども、インストール完了時にコマンドプロンプトの画面がクリアされてしまい、撮れなかった(残念)。
とりあえず無事インストールできたようなので、以下を実行してみた。
> pyinstaller dioTest-1.py --onefile --noconsole
onefile : 複数ファイルを一つにまとめる
noconsole : 新たにコンソールを開かない
pyinstallerを実行したディレクトリ(ソースコードがあるディレクトリ)直下にdistという名前のディレクトリが作成され、そこにソースファイルと同じ名前のEXEが保存されていた。
EXEを実行すると直ぐにカーソルは返ってきてpysimpleguiを使って書いたGUIアプリが立ち上がった。機能確認したところ、ちゃんと動いているようだった。
MySQLからからMySQL DownloadをクリックしてダウンロードページからMySQL installer for Windowsを選択すると以下の画面になる。オフラインでもインストールできるように下段を選択。
DownloadをクリックするとCommunityへのログオン画面になった。MySQL CommunityはOracle Communityの一部ということでOracle Community AcountでのログオンがOK。ログオン後、以下の画面になってダウンロード実行。
msiファイルを開くと以下のSetupがスタートする。Developer Defaultで進めた。後から思うとFullを選択するのが正解だと思う。
MySQL for Visual Studioをサポートするにはマニュアルで何かを構成しないといけないみたい。
このままExecuteをクリックしたら以下のメッセージが出たけれど、何をやったらいいのか分からないのでとりあえず無視でYesをクリック。
後から分かったことだけれど、Fullを選んでないのでサーバーがここ無い。
Product ConfigurationでSamples and Examplesしかリストにない。
先に進もうとするとサーバーが無いってことで怒られる。しょうがないので先に進む。
サーバーが無くては意味が無いので、もう一回インストーラを起動する。そうするとインストールするProduct選択画面になった。ここでServerを選ぶ。選んだのは最新バージョン。
必要なコンポーネントとして再配布版VC++がインストールされる。
なんだか面倒なことを聞かれているけれど、自分で使うだけなのでLegacyを選択。
パスワードはCentOSなどではStrongなパスワードをセットしたけれどここではWeakと判定。まぁしょうがない。
さすがにrootで作業するのはうまくないのでユーザーを作ってAdmin権限を付与。
ここで先程失敗したSamples and Examplesの構成を行うためReconfigureをクリック。すると以下の画面が現れる。先ほどWeakと判定されたパスワードをインプット。
これでMySQLのインストールは一通り完了。この時点でスタートをクリックすると以下のCommand Lineが利用可能となっている。
MySQL Command Lineを開く。パスワードを聞かれるのでrootパスワードをいれてみた。
PythonからMySQLをアクセスしたい。でpymysqlをインストール。今の環境はAnacondaなのでまずはAnacondaをActivateするために以下をタイプする。
> conda activate
そのあと以下を実行した。
> conda install pymysql
そうしたら、書き込み権限がないぞ!って怒られた。
改めてコマンドプロンプトを管理者として起動して同じことを実行。今度はうまくいった。で、importコマンドを実行してpymysqlが無事importできることを確認。
これでPythonからMySQLを使えるようになった。めでたし、めでたし。
Windows 10にMinGW-W64をインストールしたので備忘録。
まず、MinWG-E64-install.exeのダウロード元は以下のとおり。
https://sourceforge.net/projects/mingw-w64/files/
先人の知恵にはwww.mingw.orgを参照するものが少なくないが、そのURLは今や存在していない。どうやら、別のURLに引っ越しているみたいだけれどもそこもまだ工事中らしくDownloadタブが機能していない。なので上記からのダウンロードになる。
上記URLの以下からmingw-w64-install.exeをダウンロードする。
上記exeを走らせると以下の設定画面が出るので、x86_64を選ぶ。
Defaultのインストール先はProgram Filesフォルダー下になる。パスが深く複雑になる上に空白文字を含むのでうまくない。なのでもっと扱いやすい場所にインストールするのがよい。
このインストーラは環境変数を更新してくれないので、自分で更新する。
スタート -> Windows システムツール -> コントロールパネル -> システム(アイコン表示の場合)-> システムの詳細設定 -> 環境変数
Pathにbinフォルダーを追加する。ここにgcc.exeが入っている。
環境変数更新後コマンドプロンプトを開いて以下を実行してみる。
> gcc -v
.... いっぱい表示される。最後の行に以下が表示されてversion 8.1.0がインストールされたことがわかる。
gcc version 8.1.0 (x86_64.....
なんだかんだで、ダウンロードができるまで3時間ほどもたもたしてしまったけれども無事インストールできたようでめでたしめでたし。
追記:
この後、Visual Studio Codeでの環境を整えた。C/C++ IntelliSense, dubugging…が既にインストールされているVSCで、簡単なCコードを書いて、Terminalでgccを実行した。どういうタイミングでそうなったのか分からないけれども、View -> Command Palette...でC/C++:Edit Configurations (JSON)、つまりc_cpp_properties.jsonに記述されるcompilerPathは上記でインストールしたgcc.exeのパスが設定されていた。環境変数からコピーしてきたのだろうか、、、、
TWELITEの中継機能を使ってみた。
親機となるMONO STICKに対して3個のTWELITE DIPを設置し、そのうちの一つを中継機モードに設定した。つまり、MONO STICKは子機2個と中継機1個の合計3個の信号を受信することになる。それらの様子は以下の写真の通り。後ろのPCのUSBポートにMONO STICKが接続されている。
中継機として設定した2号機のDevice IDは2。中継機は入ってきた信号をそのまま送り出すだけなので、もはやDevice ID=2としての送信は行わない。よって、親機であるMONO STICKはDevice ID=2の信号を受信することはない。一方、Device ID=1の信号は、1号機と、その信号を中継する2号機から発信される。この識別は中継数(図中のRelay)でわかる。これが0ならば1号機からの信号、1ならば中継機である2号機からの信号と識別されるわけだ。
これは3号機についても同じことが言えて、こちらもRelayが0だったり1だったりする。
受信状況をモニターする限り、あくまでも傾向としての感触にすぎないけれども、中継信号(Relay=1)の受信頻度が少ない感じがする。ここは実際にどうなっているかはちゃんと調べないとわからない。
TWELITE-DIPを2個追加した。
それぞれ2号機(Device ID=2)と3号機(Device ID=3)として、既に構成済みのDIP(以後、これを1号機と呼ぶ)に設定したApplication ID =20210108とともにDevice IDをTWELITE R2で書き込む。
2号機(左)と3号機(右)には電源ON表示用の白色LEDに加えて、DO1に緑LEDを配線してある。1号機とともに電源を入れてMONO STICKのシリアルポートを読みだしてみるとDevice ID=1、2、3それぞれから信号が飛んできているのがわかった。
Device IDを指定してDO1設定を行ってみる。上の状態は2号機のDO1をLow(緑LED点灯)にして3号機のDO1をHigh(LED消灯)にした状態。選択的に制御が出来ているようだ。
暫く(と言っても1分未満)受信しているとエラーが発生していた。受信プログラムをデータ長さ固定(49文字分)で書いていたらListのOut of Rangeが発生した。つまり、シリアルポートから取得したデータ長が49文字未満だったわけだ。正常受信した場合、文字列は:で始まる。以下が正常受信したときの出力表示結果。
:02811501A2810CD4DD001D19000C141A8000FFFFFFFFFF9C
length 49
一方Out of Rangeが発生した場合(以下)は見た感じ頭の数バイトが無くなっているようだ。
3D65000AE81880002CFFFFFFFE7E
length 28
まだ仮説にすぎないけれど、これはデバイスが増えたことで混信が発生して、その結果受信データが壊れるんじゃないだろうか。そもそも、個々のデバイスは全く独立して動作していて(時計同期はしていない)、個々のデバイスの都合で送信しているはずだ。つまり送りっぱなし。仮に混信が発生してもそれを知る術はないはず。となれば、受信側で受信データの有効性を確認して、有効でないと判断すれば、そのデータを捨てる必要がある。
複数デバイスからの受信内容をテーブルで表示するプログラムを書いてみた。受信したDevice IDごとにソートして、定期的な受信の度に更新する。
まぁ、データ通信の基本を書いているような気がするけれども、今更のように気が付いたりしているわけだ。もうちょっと先人の知恵を学んでから悩んだ方が良いみたい。
ロジアナが欲しくなってAmazonで調べてみたら、今の時代数千円で手に入ることが分かった。一昔前は百万円くらいする専用測定機器だったけれど、今やUSB接続の簡単なデバイスとなっている。
購入したのはKingst LA1010。Amazonで8,500円程。最大100MHzのサンプリングレートで最大16チャンネル。高速ロジックを作ることなどないだろうから、日曜工作はこれで十分!
注文したら翌日に届いた。
セット内容は至ってシンプル。USBでPCに接続してPC画面上で信号を見る。
付属品のCD-ROMにアプリが入っているようだけれど、今の時代CD-ROMからファイルを読みだすのは案外面倒だったりする。自分の環境もデスクトップPCにしたCD-ROMドライブは搭載されていない。今回アプリをインストールしたいのはタブレットPCなのでURLを探してそこからダウンロードした。
以下、実際に動かしたところ。プローブしたのは作りかけのモノマルチ(74HC423)回路。赤外線センサーの信号をトリガーにして長い単発パルスを出す。これはTWELITEの入力信号を作る回路になる。トリガー条件をCh0の赤外線センサーからのRising Edgeにして、Ch1で423のQを見ている様子。
なんだか込み入った回路を作ってみたくなってきた。
繰り返しテストを行うとなるとGUI Toolが欲しくなってくる。そこでPythonでGUI Toolを作ってみた。PySimpleGUIが便利との先人の知恵にならって作ってみた。
環境はWindows 10でエディタはVisual Studio Codeにした。最初はCentOSで構築を試みたけれど、PySimpleGUIがうまく動かなかった。CentOS7にはPython 2.7がDefaultでインストールされているが、PySimpleGUIはPython3を前提にしていて、Python 2.7用のPySimpleGUIをインストールしたりしたが上手く動かず、、、Python 3もインストールしてみたけれども、これもいろいろと問題があり(yumが動かなくなったり)。なのでWindows 10にした。よかったこととしてはVisual Studio Codeをつかってみたこと。これは便利だ。
さて、まず受信データの表示を実装した。これは画面描写のタイミングで最新の情報を表示するようにした。そのためCOMポートからデータを読み込むときにreset_input_buffer()を実行している。MONO STICKは1秒単位でデータを受信するので、どんどんCOMポートのBufferにデータがたまってしまう。アプリがCOMポートからデータを読み出しとしてもバッファされた過去のデータを読み出してしまった。このために最新のデータを表示したい(COMポートから読み出したい)ので一旦バッファをクリアしてから、その直後の受信データを読むわけだ。
しかし子機が複数になった場合、この方法ではどの子機のデータを読み出すかわからない。バッファをクリアしてから暫くCOMポートを連続読みして、すべての子機のデータを拾う必要がある(とりあえずこれは今後の課題)。
データ送信側はData Out Port 1(DO1)からPort 4 (DO4)まで個別に制御するようにボタン配置した。アプリ起動時はすべてのポートはHIGH (0)に初期化している。以後、それぞれのポートの操作は記録していて、いずれかのポートの値を変更したとしても、他のポートはそれ以前の値を保つようにしている。
PWMは1000HzでのDuty比を0から100まで設定する。ポート設定値は100で0x0400になる。これもどのポートに値をせっていするかボタン選択している。他のポートの設定値はそのまま維持するようにしている。なお、アプリ起動時の初期値はすべてゼロにしている。
結論:
PySimpleGUIは便利だ。Visual Studio Codeも便利だ。これを使わない手は無い。
CentOSでなやんで半日以上費やしてしまった。CentOS8でも試してみるか、、、、でもそれが目的ではないし。しかし、久しぶりに書くコードは汚くて古臭い、、、、とほほ。
通信ネットワークでは、たとえばドメイン名とデバイス識別子の組み合わせで通信相手を特定する。TWELITEも同様だ。それぞれがApplication IDとDevice IDに対応する。
Application IDはTWELITE出荷時にすべて(多分)のデバイスに同じIDが割り当てられている。一方Device IDは未設定のようだ(少なくとも自分が購入したTWELITE-DIPには設定されていなかった(*が表示された)。
昨日のI/O試験でMONO STICKからDIPへの送信は1バイト目の宛先アドレスを0x78で送信していた。この0x78は全子機への送信、つまりブロードキャストだった。で、今日はDIPにDevice IDを設定して選択的な通信ができることを確認する。
自分の実験環境について改めて書くと、PythonはCentOS上で実行している。これは今後機能設計を進めていくプラットフォームをLinuxにしたいからで、Linux上の開発環境の習得も同時に行いたいから。一方、使っているPCはWindows 10なので、VMWare PlayerをインストールしてVM環境を作っている。Tera Termを使ってWriter R2をアクセスしているので、R2が接続されているCOMポートをWindowsとVMとの間で接続切り替えをする必要がある(COMポート(COMポートに限らないけれど)はどちらか一方に排他的に接続されるので)。この切り替えは至って簡単で、VM Playerのプルダウンメニューの取り外し可能デバイスで操作すればよい。
Tera TermでBaud Rateを115200にセットして+を3回タイプしてInteractive Modeに入り、iをクリックしてDevice IDをセットする。とりあえず1をセットした。Sをタイプして保存し、再び+を3回タイプしてInteractive Modeを抜け、DIPをR2から外す。
COMポートに書き込む文字列の1バイト目の0x78を0x01に変更する。
変更前
sr.write(':7880010001007F000000000000XX' + '\r\n')
変更後
sr.write(':0180010001007F000000000000XX' + '\r\n')
0x01で通信ができ、その他0x78以外では通信ができないことを確認した。
通信できることが分かったので、具体的にI/Oを行ってみたくなるのは人情。
TWELITE-DIPからMONO Stickに送られてくるデータを翻訳してみた。PythonのソースコードはRaspberry PiによるIoTシステム制御(森北出版)を参照させていただいた。
:788115017B810CCAC2006E33000BFB1680002BFFFFFFFEFA
[0] : src = 0x78
[1] : command = 0x81
[2] : packet id = 0x15
[3] : version = 0x01
[4] : LQI = 0x7B
[5-8] : src address = 0x810CCAC2
[9] : dist = 0x00
[10-11]: time stamp = 0x6E33
[12] : relay flag = 0x00
[13-14]: volt = 0x0BFB
[15] : reserved = 0x16
[16] : DI1-4 = 0x80
[17] : DI1-4_chg = 0x00
DI1=0/0 DI2=0/0 DI3=0/0 DI4=0/0
[18-21]: e1-e4 = 0x2BFFFFFF
[22] : ef1-ef4 = 0xFE
AD1=0696 AD2=-001 AD3=-001 AD4=-001 [mV]
これを見ていればDIPが送ってくるデータの確認ができる。DIPでは”超簡単!標準アプリ”が走っている。これは1秒間隔でデータを送ってくるのでこのデータ表示も1秒間隔で更新される。
電源がONになっているかを目視確認するためにLED1を配置し、DIPのマニュアル通りにDO1とPWM1にLEDを配置した。またDI1にSW1を配置した。DI1はプルアップされているのでこの回路になっている。更にAI1に温度センサー出力を繋いでいる。
この回路でSW1をONすると以下に変わる。
ON DI1=1/1 DI2=0/0 DI3=0/0 DI4=0/0
SW1をOFFすると以下になる。
DI1=0/1 DI2=0/0 DI3=0/0 DI4=0/0
つまりChange bit(の0/1の分母)は1のままの残るわけだ。これで1秒のインターバルよりも短い時間で状態遷移が発生しても記録が残るわけだ。
温度センサー(AD1)も手を当てていると数値が上がっていく。期待通りの動き。
次に出力制御を見てみる。その前に実際のブレッドボードは以下の通り。出力制御ではLED2とLED3の制御を行う。
以下がサンプルプログラム。至ってシンプル。
import serial
sr = serial.Serial("/dev/ttyUSB0", 115200)
# 78 80 01 00 01 00FF 0000 0000 0000
sr.write(':7880010101007F000000000000XX' + '\r\n')
sr.close()
太字が重要で、最初の太字の00のBit0からBit3DO1からDO4に対応する。1がHighで0がLow。回路図の通りで、DO1がLowでLED3が点灯する。次の01はマスクで、01になっているのでDO1はマスクされていない状態。
次の00FFがPWMの値。3FFでMAXでここでの設定は7FなのでLDE2はかなり暗い。
なおMONO-WIRLESSには以下の記載がある。
1: 1バイト : 宛先アドレス(論理デバイスID) (0x00: 親機, 0x01 ~ 0x64: 子機ID指定, 0x78: 全子機)
親機から子機、または子機から親機への伝送に限ります。
2: 1バイト : コマンド番号 (0x80 固定)
3: 1バイト : 書式バージョン (0x01 固定, 将来のための拡張)
4: 1バイト : IO状態
b7..b3b2b1b0とした場合 b0/b1/b2/b3 が DO1/DO2/DO3/DO4)の設定値となり、0がHi、1がLoとなります。設定を有効化するために、続く IO状 態マスクのビットがを1に設定します。
5: 1バイト : IO状態設定マスク
b7..b3b2b1b0とした場合 b0/b1/b2/b3 が DO1/DO2/DO3/DO4)の設定値となり、0で対応するDOを設定しない、1で設定します。
6: 2バイト : PWM1の設定値 0(0%)~1024(100%)または0xFFFF(設定しない)を与えます。
7: 2バイト : PWM2の設定値
8: 2バイト : PWM3の設定値
9: 2バイト : PWM4の設定値
10:1バイト : チェックサム
チェックサムは省略可能で、その場合は”XX”を入力すればよい。
チェックサムを計算したければ、上記MONO-WIRELESSの以下の解説に従えばよい。
データ部の各バイトの和を8ビット幅で計算し2の補数をとります。つまりデータ部の各バイトの総和+チェックサムバイトを8ビット幅で計算すると0になります。
チェックサムバイトをアスキー文字列2文字で表現します。
例えば 00A01301FF123456 では 0x00 + 0xA0 + ... + 0x56 = 0x4F となり、この二の補数は0xB1 です。(つまり 0x4F + 0xB1 = 0)
まぁ、いずれにせよ基本的なI/Oが出来ていることが確認できたわけだ。
めでたし、めでたし。
半完成モデルのTWELITE-DIPの半田付けもなんとか完了し、パワーオンの準備が整った。
PCのUSBのCOMポートを介してTWELITEの初期設定を行う。初期設定したいのはApplication ID。グループIDみたいなもので、飛び交う信号の中から、同じApplication IDの信号を拾っていくことになる。なので通信を行うTWELITE間ではApplication IDを揃える必要がある。Default値は(多分)すべてのTWELITEが同じ値を持っているので敢えて設定しなくても通信は始められる。けれどもTWELITEがちゃんと動いているかを確認する意味で設定画面での操作を実行してみる。
TWELITE-DIPはTWELITE R2を介して、USB Type-CコネクタにてPCのUSBポートに接続される。
R2にDIPを載せてUSBケーブルに接続する。
Tera TermのシリアルポートをR2に接続されているCOMポートにし、Baud Rateを115200に設定する。
コンソール画面で+を0.5秒くらいの間隔で3回タイプしてセッションを無事開くことができると以下のInteractive Modeメニューが表示される。
ここでaをタイプしてApplication IDを設定する。ここではこの作業を実施した日をApplication IDに設定している。S(大文字)をタイプすることで設定がFlashに永続保存される。以下はSをタイプした後の画面。
再び+を3回タイプすることでInteractive Modeを抜けることができる。この状態でR2からUSBケーブルを抜き、DIPの作業を終える。
こちらもR2同様に+を3回タイプすることでInteractive Modeに入る。
R2同様にaをタイプしてApplication IDを設定し、Sをタイプして保存する。
保存が完了するとその直後からR2との間で通信が始まり、以下のラインを1秒間隔で表示する(R2のDefaultでの信号送信間隔は1秒)。
ブレッドボードではDI1にスイッチをつなげてあり、スイッチを押すとGNDにつながる。以下の表示では1でスイッチを押して、2で離し、再び3で押して。4で離している。とりあえずR2が機能していることが確認できた。
以上で基本形ができたので、以降実際にI/Oをすべくプログラムを用意していくことになる。
ちゃんと回路図を書きたくなった、というよりも書かないと何をやったんだか分からなくなる。
エンジニアを始めた35年ほど前、使い始めたのはOrCADだった。インターネットで調べてみるとまだOrCADは健在のようだ。
そもそもMS-DOSの世界でOrCADが動いていたってのも、今か思うとすごい事だ。
そんななか、投資は最小限にしたいので優れたフリーソフトを探してみた。で、、、、
水魚堂さんの回路図エディタを使ってみることにした。
このソフトはmfc110u.dllを前提としているとのこと。で、マイクロソフトダウンロードセンタより再配布モジュールのダウンロード、インストール実行。
この水魚堂さんのBS3chVはなかなかGoodです。エクセルマクロでのライブラリ作成も簡単ですし。インストールからほどなく、TWELITE-DIPを使った回路が描けました。
いい仕事に大感謝です。
PythonでMySQLを操作したくなった。CentOS7での話。
(目的はTWELITEから送られてくるデータの保存用)
で、以下でインストールしてみた。
# yum install mysql-connector-python
--- 省略 ---
インストール:
mysql-connector-python.noarch 0:1.1.6-1.el7
完了しました!
#
以下、簡単なプログラムを用意した。すでにデータベースとしてTHTを用意してある。
# test.py
import pymysql.cursors
def main():
connection = pymysql.connect(
host='localhost',
user='hit',
password='hit',
db='THT',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor)
connection.close()
if __name__ == "__main__":
main()
で、PythonでDBが操作できるか確認。残念ながら失敗。pymysql.cursorsがimportできない(見つからない)と言ってる。
$ python test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
import pymysql
ImportError: No module named pymysql
先人の知恵を調べてみるとPyMySQLはpipでインストールするのが良いとの言っている。PythonはPython Package Indexというライブラリーが用意されている。pipはそのライブラリーからインストールするツールということだ。で、pipのインストールから実施。なお、先人の知恵にはEPEL(Extra Packages for Enterprise Linux)を忘れないように!というアドバイスがあり、それに倣った。
$ sudo yum install -y epel-release
$ sudo yum install -y python-pip --enablerepo=epel
$ pip install mysql-connector-python
これでも同じエラーがでる(みつからない)。
で、以下を実行。
$ sudo pip install PyMySQL
これで初めてOKとなった。
ただしOKとなったのはPython2.
$ python test.py
Python3では同じエラーとなった。
$ python3 test.py
ImportError: No module named pymysql
結論:
以下でインストールせよ。ただしPython2でのみ有効。
$ sudo pip install PyMySQL
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
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 | 31 |