h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ


アマゾン・ベストセラー

メタ情報
RSS
Login

タグ:『プログラミング』の付いた記事

地図遊び

国土地理院の地図データなどを使うプログラムを書いて遊んでいる。 キッカケは 湊あくあの マイクラ配信での発言。 ENサーバとの接続前後で、お互いへの観光が盛んになった時期。 ENメンバーに見てもらうような施設をつくりたい。 日本的なものって何? 秋葉原? という発言があった。 秋葉原全体をマインクラフト上に再現するのは大変だが、 用地確保と土地の割当だけし、 あとは作りたい人が作りたいものを作るということにすれば 面白いのではなかろうか。 マイクラのブロック単位(1m)の地図を用意すれば作れるのでは? 地図は公開されている地図データから生成可能ではないかと考えた。

FANコントローラ作成中

PCファン用4Pコネクタを手に入れたので、 これを使った機器を作ろうと思う。 機能としては温度計測と、それに伴うFANの制御。 温度とFANの状況の報告など。 となるとCPUはESP32、 LCDは沢山もっている2.4インチLCDモジュール・タッチスクリーン付きとした。

ESP32は、当初 ESP32-WROOM32モジュールを直接使用するつもりだったが、 設計を進めるうち、意外と基板のスペースに余裕がないことに気が付き、 ESP32 Devkitを使用するとUSBシリアル、ファーム書き込み、電源レギュレータ等を 省けるし、使い回しも可能なので、こちらを使うことにし、基板を注文。 秋月にも部品を注文するが(コロナのせいで?)発送が滞っているらしく 基板と同時に到着した。

ROS2勉強中

軽トラのラジコンを買ったので いろいろ遊びたいと思っているのだが、 だらだらやっても面白くないので この機会にROS2などを学び、 それらの機能を使って遊んで行こうと考えた。

ROSとはRobot Operating Systemのことで、 ロボットの制御を行う複数のプログラム間の通信など の機能を提供してくれるものらしい。 ROS2は、そのversion2。 あまりよくわかっていないが、 とりあえずインストールしてみる。

ESP32のタイマー割り込み

esp32でタイマー割り込みを使用するプログラムを書いた。 LEDを色んなパターンで点滅させ、状態を表示するプログラム。 割り込みを使えばプログラムが長い処理を行っている最中でも 状態を表示できる。

"esp32 timer 割り込み"で検索すると いろいろ情報が出てくるが多くのサンプルプログラムは 同じ。こんな感じ。


vtuberチャンネル登録者数取得プログラム

昨日 サメちゃんこと Hololive-ENのGawr Guraが チャンネル登録者数200万人を達成した。 V-tuberではKizuna Aiに次ぐ2番目だそうだ。 Hololiveの100万人超えメンバーは 戌神ころね126万、 白上フブキ119万、 兎田ペコラ117万で つい先日、湊あくあが100万を達成、 宝生マリンも99.4万人なので 数日中に100万人を突破するだろう。 チャンネル登録者100万人を越える日 の予想グラフと比べてみると興味深い。

Serial.begin()を2回やるとダメな話

arduiono-esp32でlog_i()が使えるようになった と喜んでいたら、ある環境で使えない。

使える環境と比べつつ色々試した結果 Serial.begin()を2回呼び出すとlog_i()が 何も出力しなくなることがわかった。 この状態でも Serial.print()系は出力されるので わかりにくい。

arduino-esp32のCore Debug Level

arduino-esp32のライブラリのソースを見ると log_e()やlog_v()で 各種メッセージが出力されている ()。 これらのメッセージは Arduino IDEだと メニューのツール→Core Debug Levelで設定で 出したり出さなかったりできる。

platformioだと platformio.iniでbuild_flagsを指定してやればいい。

Electron + typescript で serialportを使う

PC用のプログラムを作成する場合、 Electron + typescript を使うのが最近の好みだ。 まだまだ理解していない部分も多いが vscodeとの一体感とか 見た目の綺麗さとか developer toolの使いやすさとか intelisenseとかが気に入っている。

自作モータドライバ基板の 特性等を調べるプログラムに 前回はpython + TkInterを使ったのだが 今回はElectron + typescript を使ってみた。 シリアル通信を使うので serialportライブラリを使用したのだが 使えるまでに色々とトラブったので記録しておく。

XIAOMI湿度計その後

フィラメント・ケースの湿度を監視している XIAOMIの湿度計だがトラブルが発生した。 Linuxサーバーが遅くなる。 調べると bluepy-helperというプロセスが 幾つか全速で走っている。 どうも pythonのbluepyを使用しているプログラムで Peripheralとのconnectionを切断した時に 時々bluepy-helperのプロセスが走りっぱなしに なるようだ。

LYWSD03MMC.pyには bluepy-helperをkillする処理が何箇所か入っているが それでも充分では無いようだ。

XIAOMI 湿度計到着

AliExpressに注文していた XIAOMIの湿度計がやっと届いた。 8月16日に注文していたので5.5週ぐらいで 届いたことになる。 価格は4個で1,229円。1個あたり306円と激安。

コンパクトで可愛いデザイン。 電池の絶縁テープを抜くと すぐに温度と湿度が表示された。 裏蓋を外し内部を確認。 電池はCR2032。 MOYASHI氏のフィラメントケースの ホルダーにバッチリはまって気持ちが良い。

Arduino で XIAOプログラミング

HDDサンダーで 回転数をXIAOで読み取るまでできた。 その際に取得できた ArduinoでXIAOのプログラム、 ライブラリでは解決できず、 自分でチップのレジスタを操作するような プログラムを書くために 必要な知識をいくつか紹介する。


「ESP8266のntpの設定は1行で」更新

「ESP8266のntpの設定は1行で」 というのは 3年前にQiitaに投稿した記事なのだが、 地味にLGTM(Look Good to Me,旧like)を 貰い続けている記事の1つ。

その記事に引数の値がおかしい、と コメントがついた。 サンプルプログラム通りだと 時間が18時間遅れるらしい。

調べると esp8266/arduinoの versionのせいらしい。 2.6.3までは正常に動くが 2.7.0以降はおかしくなる。 configTime()関数の 第1引数の符号の解釈が 逆になってしまったらしい。

USB-I2C基板 (ソフトウェア編)

USB-I2C基板はpythonから使いたい。 pythonでI2C経由で機器を操作する プログラムを作りたい。 MCP2221 Pythonで検索すると いろいろ情報が見つかる。


LED版RssDispも更新

昨日更新した OLED版のRSS表示プログラムの調子は良いが、 LED版の方は調子が悪い。 調子が悪くて、しばらく消していたのだが、 RSS表示はともかく、時計が見易く慣れてしまっていたので LED表示も復活させたい。 というわけでLED版も更新することにした。 ソースを調べるとLED版はOLED版のソースを流用したものだったので、 変更箇所が同じで、簡単に更新できた。

RssDispを更新

OLEDの寿命で取り上げた RSSを表示するプログラム: RssDispの表示が 調子悪くなってしまった。 原因の1つは、httpでRSSを提供するサイトが減ってしまったことで、 もう一つは Make:の RSSの反応が遅くなってしまったことらしい。 リクエストを出して10秒ぐらい返事が帰ってこない。

OLEDに表示されたRSSを真剣に読んでいるわけではないが、 正常に表示されないと気持ち悪いので プログラムを修正することにした。

2GTプーリー形状のベジェ曲線化

タイミングベルト2GT用のプーリーを3Dプリンタで 出力できるようになったが、 頂点多すぎる問題が気になって 他の作業が進まない。 仕方が無いので、 プーリー形状のベジェ曲線化に取り組むことにする。

点列をベジェ曲線に変換する方法を ネットで検索するが、簡単には見つからない。 TensorFlowを使う方法 最小二乗法を使う方法 (媒介変数tの値が解れば最小2乗法で解けるらしい) などに翻弄されつつ、 stack overflow 経由で 1990年に出版された本 Graphic Gems のプログラム FitCurves.c に辿り着く。 ソースも github で公開されている。 コンパイルすると、ちゃんと動いた。

タイミング・ベルト用プーリーの製作

前回シンクロベルトを購入したと書いたが、 タイミング・ベルトというのが正しいのだろうか? ミスミの分類ではタイミングペルトで、 シンクロベルトはバンドー化学の商品名か?という気もする。 今後はタイミングペルトと書くことにする。

タイミングペルトがあれば、ギアというか歯付きプーリーも必要になる。 とりあえず手持ちで20歯のものが4個あるが、3Dプリンタで自由に作れると大変嬉しい。

srcPrint

テキストファイルをpdfに変換するプログラムを 作成した。名前はsrcPrint。プログラムのソースファイルを 印刷する時に使うやつ。 昔あった a2psみたいなやつ。 GitHubで公開中

プログラムをしていると、時々欲しくなる。 a2psやa2pdfなどや フリーソフトを探してみたりして、 なんとかしてきたが、 今回 electron と typescript の練習を兼ねて、 作ってみた。

electronを使っているので、テキストファイルは htmlに変換され、 cssでフォーマットを指定、 electronの機能でpdfに変換される。

現状、最低限の機能のみだが、 自分用としては、十分使える。 気が向いたら、機能拡張したい。

Doxygen再び

今、マイコンで動くテキスト・エディタを作っている。 まだ、Linux上で開発している段階だが、 ある程度できたので、 ここらでプログラムの整理をすることにする。

関数をグループごとに整理し、必要ならば名前も付け替えたい。 ここで Doxygenを使ってみたら便利だった。

まず、ファイルごとに関数の一覧を出してくれる。 これだけで便利だ。


次に、Doxygenの生成するhtmlを見ていると、 これを、もっと良いものにしてやろうという気持ちが起こる。 しかし、無駄に説明を追加しがちにもなるので、注意も必要だ。

あと、 graphvizも使うと、関数の呼び出し関係図を表示してくれて 興味深い。

Raspberry Pi用OLED ライブラリを作った

最終的に作ったライブラリは こちら

ラズパイ・ファン基板で OLEDを取り付け易くしたのだけれど、 i2c接続なので表示速度はどうなのだろうというのが気になっていた。

というのは、i2cは転送速度が速くない。 ラズパイのデフォルトでは100kbps。 OLEDは 128x64 dot なので、128x64 = 8kbit。 これを100kbpsで転送すると、転送時間は 8kbit ÷ 100kbps = 0.08sec 連続表示させると 毎秒 1 ÷ 0.08 = 12.5 フレーム表示できることになる。 スムーズな動画表示には少し遅い。転送以外の処理の時間も必要。

実際のところはどうなのだろうと測ってみることにした。

VS Codeでstm32のプログラミング

windows上のemacsでIMEを上手くコントロールできないため、 VisualStudio Code(以下VS Codeと記す)の環境整備を頑張った所、 かなり使えるようになってきた。 これで移行できるかもしれない。

Electronの本 読了

Electronの本を読了した。

掲載されているコードを律儀に入力し、 動作させながら読んでいったので、 時間はかかったが、 ある程度、知識が身についた気がする。

コードを本の通りに入力しても、 1文字でも間違えれば、動作しない。 コンソールを開ければ、例外のログとかが見れて、 大体理由がわかるのだが、 devToolを開けるのも 大変な場面が多々あり、なかなか大変だった。

あと main process側のメッセージは devToolのコンソールには 表示されないのかな? この辺の話は、まだ十分理解できていない。 こういうデバッグの話も詳しく説明してくれると、 もっといい本になるのではないかと思う。

今後は、独自プログラムの開発を行いつつ、 いろんなライブラリを試し、 Electronの技術を身に着けて行きたい。

Electronの本

Electronを覚えたいと、 正月にも書いているのだが、 一向に使えるようにならない。

ネットでElectron入門的な記事を探し、 試しているのだが、周辺の知識が 足りなすぎて、勉強が進まない。

本でも買うかとAmazonで検索すると、 Electronとタイトルにある本は2冊しかない。

1冊は あなたにとってElectronを学ぶ価値があるかどうか、この本を読んで判断してみてくださいで、kindle本。 41ページで99円。

とりあえず、これを読んでみて 2冊めのElectronではじめるアプリ開発 ~JavaScript/HTML/CSSでデスクトップアプリを作ろうのレビューを見ると、 入門書ではなさそう。なんか良さそうに思えたので中古を購入。

で、届いて読んでいるのだが、結構良さそうだ。 この本に従って、アプリ開発を試してみよう。

電光掲示板プログラムを公開

HSES-LMC1の秋月電子での発売に合わせて、 電光掲示板プログラムを GitHubで公開した。

これは、HSES-LMC1を一般(?)の電光掲示板として動作 させるためのプログラム。

表示内容をSDカードに記憶し、読み出しながら表示する。 Web経由で表示内容の編集ができる。 (使用可能なブラウザは chrome のみ)

esp8266/Arduinoを 2.3.0に戻す

以前いじっていた esp8266/Arduinoのプログラムを make ota で書き込もうとするがエラーになる。 ArduinoOTAのexampleの BasicOTA で試すと書き込めるので、サイズの問題か? OTAが使えないと、とてもプログラムを開発する気にならない。 困った。

2.3.0のころは書けていたので、2.4.1から戻してみることにする。 ボードマネージャで戻す方法はよくわからなかったので、 git で esp8266/Arduinoをインストールし直す。 ちなみにgit clone では -b オプションで バージョン(tag)を 指定できる。

Arduino-IDEからは、すぐに使用できるようになったが makefileからだとエラーになる。 いろいろ調べた結果、git でインストールした際、 テキストファイルの改行コードが変換されていたことが 原因だと判明。 boards.txt platform.txtの改行が CRLFになってしまうと、 makefileでの処理中にCRコードが残り、 エラーになってしまうようだ。

これで makefileから OTAで書き込めるようになった。 2.4.1でうまくいかない理由は調べていない。 ArduinoOTAについても、いつか、調べないとなぁ。

Raspberry Piで動画をLEDに音付きで再生

hzeller/rpi-rgb-led-matrix付属の 動画再生プログラム video-viewerを改造し、 動画ファイルを音つきで再生できるようになった。 前にも書いたが フレームの遅れが蓄積されない ように改造した。 変更点は、pull-requestを投げたいが、 まだ、ちょっと汚いのが悩みどころ。

音の再生は別プログラム(aplay)で 行っている。これも将来的には組込みたい。

Raspberry Pi Zero WH 動作テスト

miniHDMI変換アダプタとUSB-microB OTGケーブル が届いたので、 Raspberry Pi Zero WHを動作させてみる。

Zeroは基板は極小だが、ケーブルを刺すと そうでもなくなる。 ケーブルを ケーブル・オーガナイザで固定してやると良い感じである。

Raspbianをダウンロード、 microSDカードに書込み 立ち上げたら、特に問題もなく起動。 キーボード、WiFiの設定を行い、 普通に使えるようになった。

その後、 hzeller/rpi-rgb-led-matrixをインストールし、 LEDマトリックスモジュールへの表示を試す。

表示はできるが、負荷が重い感じ。 動画の再生を行うと、はっきりと遅い。 やはり コア4個のRasberry Pi 3と比べると、 コア1個のZeroだと、余裕が無い感じだ。 表示も、多少、ちらつきが感じられる。

ESP32_bt_speaker 更新

ESP32をBluetoothスピーカーにするプログラム ESP32_bt_speakerを更新した。

作成後、esp-idfが、かなり更新されたので、 いろいろと問題があるだろうなとは思っていたのだが、 手を付けずにいたのだが、 githubにissueついたので、 対応することにした。