マトリクスLEDドライバを使ってフルカラーLEDを制御してみる

今回の経緯 フルカラーLEDを最大5個制御したい! 最初NeoPixel(マイコン内蔵LED)を使う予定だったが、いろいろ試した結果、今回の条件では使えなさそうという結論になった。 マイコン内蔵ではない、通常のフルカラーLEDを使うことにする。 ただ、使用できるピン数は限られているため、マイコンボードからはI2CやSPI等で制御する形にしたい。 フルカラーLEDドライバを探す。 スイッチサイエンスで探したらよさそうなのがあったけど値が張る。 秋月でさがしたらこんなのがあった。 安い。もともとはドットマトリクス制御用らしいが、フルカラーLED制御にも転用できそう。 準備物 部品名 購入先 ESPr Developer 32 スイッチサイエンス 16×8LEDマトリクスドライバーモジュール(HT16K33) 秋月電子通商 RGBフルカラーLED 秋月電子通商 結果 とりあえず2個のフルカラーLEDを制御できた。 ただし、r, g, bはそれぞれ0(OFF)か1(ON)でしか調整することは出来ない。 プログラムとハマりポイント プログラム GitHub ハマりポイント I2Cアドレスでハマった。 秋月の解説ページでは初期状態なら0xE0(write)と書いてあったので、Arduinoのスケッチでアドレスを0xE0に指定したがなにも反応しなかった。 調べてみるとこの方法は誤りで、Arduinoの場合は最下位ビットを除いた7ビット分をアドレス値に設定する必要があるらしい。 スレーブアドレスを0x70と設定したらうまくいった。 参考:https://tool-lab.com/make/pic-practice-37/ 雑記 いま探したらaitendoでもっと安い、100円のフルカラーLEDドライバ(単体)があった。 ただこっちはチップ単体の値段だし、データシートが中文で読むのが大変そう…。 IoT開発スタートブック ── ESP32でクラウドにつなげる電子工作をはじめよう! 技術評論社 Amazon Kindle 楽天 楽天Kobo

December 8, 2019 · 1 min

Spresense SDKでカメラモジュール用のサンプルを動かした

概要 ソニーのシングルボードコンピュータSpresense及びSpresense用カメラモジュールを使って、公式で公開されているサンプルプログラムを動かした。 大体READMEの手順に従ったが、ところどころ詰まるところがあったのでメモとして残しておく。 Spresenseの簡単な説明 ソニーが開発したシングルボードコンピュータ。 Arduino IDEで開発可能。 NuttXというリアルタイムOSベースのSpresense SDKでも開発できる(今回はこっち)。 機能の主な特徴は以下。 GPSが標準で内蔵されている。 マルチコア(6コア!)プロセッサ。 メインボード単体だとネットワーク機能が使えないという点が個人的にはネックだと思っている。 Spresenseが出る少し前に流行し始めたEPS32系にすべて持っていかれている印象がある。 サンプル実行手順 今回動かしたサンプル 今回はカメラモジュールの動作確認がしたかったので公式が公開しているexamples/cameraを動かした。 実行環境 OS:Windows10上のWSL(Ubuntu16.04) 開発環境:Spresense SDK 手順 基本はスタートガイド参照。 1.開発ツールのセットアップ、ブートローダのインストールを行う。 ここは公式の手順通りでいけるはずなので省略。 2.手順1.でSpresenseのプロジェクト一式をGitHubから落としてきているはずなので、その中のexamples/camera/README.txtを確認する。 READMEを読むと、液晶コントローラILI9340で駆動しているLCDを使って、カメラが取得した画像を表示できるようになっていることが分かる。 3.ILI9340で駆動しているLCDを用意してSpresenseにつなぐ。 今回はちょうど手元にILI9341で駆動している2.2インチTFTがあったのでそれを使った。 ここが引っかかるポイントその1(だと思う)。 READMEを読むと、拡張ボードを使わない場合はSPI5のピンにSPI関係の4ピンをつなげばよいということは書いてあるのだが、TFTのDCピンとRESETピンの配線先ピンが分からない。 この問題に関しては、コードを読みこむ必要があり(本当はどこかに説明書きがあるのかもしれないが…)、/sdk/bsp/board/spresense/include/board.h198行目~に定義されている。 #if defined(CONFIG_LCD_ON_MAIN_BOARD) /* Display connected to main board. */#define DISPLAY_RST PIN_I2S0_BCK #define DISPLAY_DC PIN_I2S0_LRCK #define DISPLAY_SPI 5 この記述から、DCピンはI2S0 LRCKピン、RESETピンはI2S0 BCKピンにつなげば良いことがわかる。 4....

November 30, 2019 · 1 min

NeoPixelをESP32開発ボードで点灯させるのに丸1日かかった話

概要 当初ESPr Developer 32でNeoPixelを1個制御したかった 点灯自体はするのだが、色が正しく反映されない(赤を指定してるつもりでも、緑や青色になる) 上記問題を解消するのに丸1日かかった 結論 NeoPixelの動作電圧5Vに対し、IOの電圧を3.3Vにしてしまっていた 丸1日、試したこと 最初に、今回使用したNeoPixelの動作電圧がデータシート上4.5V~6Vということで、NeoPixelのVCCは5V、DINはESPr Developer 32のIO27ピンに接続した。 ライブラリAdafruit_NeoPixelを使って動作確認用プログラムを作成。 なんか色がおかしい!clear()も正常に働いていない。 “esp32 NeoPixel"でググる。 なんか他の人は大体正常に動作してるっぽい。 ネットの記事が比較的古い情報だったので、ライブラリのバージョンを疑う。 ライブラリAdafruit_NeoPixelのバージョンをネットの記事に合わせて下げる(ver1.3.0→ver1.2.3)。 動作不良変わりなし。 Arduino core for the ESP32のバージョンを下げる(ver1.0.4→ver1.0.0)。 動作不良変わりなし。 ライブラリAdafruit_NeoPixelがESP32ボードだとうまく使えないという記事を見かけ、NeoPixelライブラリ自体を疑う。 代替ライブラリとしてFastLEDのサンプルを動かす。 これも色がおかしい! 代替ライブラリとしてNeoPixelBusのサンプルを動かす。 相変わらず色がおかしい。 Arduino Pro Mini互換機でAdafruit_NeoPixelのサンプルを動かす。 ちゃんと想定通りの色が出る。 ネットで再度ググるが"ESP32でもNeoPixelは使える"という情報ばかり。 動作確認に使っていたESPr Developer 32ボードを疑う。 違うESPr Developer 32ボードで動作確認する。 動作不良変わりなし。 同じESP32開発ボードであるESP32 DevKitCを使って動作確認する。 動作不良変わりなし。 電源だけArduino ProMini互換機からとってみたりする。 動作不良変わりなし。 ライブラリAdafruit_NeoPixelの実装を見てみる。 ESP32関係ボードの場合は、マクロF_CPUの値からCPU動作周波数を確認し、インラインアセンブラで信号のHIGH/LOWのタイミングを制御しているらしい。 一応マクロF_CPUの値をシリアル出力させて確認してみる。 F_CPU=240000000(240MHz)で想定通り。 本当に240MHzで動いてるのかを確認しようかとも思ったが、確認方法もパッとわからないので後回しにする。 ビルドオプションでCPU動作周波数を変えてみる。 動作不良変わりなし。 Adafruit_NeoPixelのProjectページ(GitHub)のissueを確認して類似の問題がないか確認する。 https://github.com/adafruit/Adafruit_NeoPixel/issues/139を見つける。 細かいことはよくわからないがNeoPixelBusを使えば正常に動いたという報告があるみたい。 といっても前述の通りNeoPixelBusのサンプルをそのまま動かしただけでは正常に動作しなかったため、NeoPixelBusのProjectページ(GitHub)のwikiを見る。 https://github.com/Makuna/NeoPixelBus/wiki/FAQ-%232を見つける。 自分の無知さに絶望する。 対策 とりあえず以下のいずれかの方法で正常な色が出力されることを確認。...

November 2, 2019 · 1 min

[Raspi Zero W]Play startup sound with UART MP3 Voice Module

Purpose Play startup sound when raspi boots Prepare Raspberry Pi Zero W Gravity: UART MP3 Voice Module Reference https://qiita.com/ikemura23/items/6f9adce99a3db555a0e4 http://hendigi.karaage.xyz/2016/11/auto-boot/ https://tomosoft.jp/design/?p=11677 https://wiki.dfrobot.com/Voice_Module_SKU__DFR0534 Auto run methods /etc/rc.local Run script as root crontab Run script as user systemd Manage as a service Implement Select /etc/rc.local at this time Edit /home/pi/Boot/boot_syateki_server.py as below import serial # open serial port s = serial.Serial('/dev/serial0', 9600, timeout=10) # set volume 0x16 (0x00 - 0x1E) s....

October 13, 2019 · 2 min

Using an I2C OLED Display with the Raspberry Pi Zero W

Environment Board Raspberry Pi Zero W OS result of lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster OLED display HiLetgo 0.96" I2C シリアル 128×64 OLED LCDディスプレイSSD1306液晶 Setting i2c Enabling i2c sudo raspi-config select 5 Interfacing Options select P5 I2C select Yes Installing packages sudo apt-get update sudo apt-get install i2c-tools python-smbus Connect to OLED Wiring confirm pin assign http://xn–ccke1di9d4h....

October 12, 2019 · 2 min

elecrow発注用zipファイル作成ソフト(KiCad向け)を作った

elecrowへプリント基板を発注する際に必要なファイル変換作業をソフトで自動化した。 作成ソフト 動作OS:Windows 開発環境:Visual Studio 2017 以下のGitHubのページから実行ファイルをダウンロードできる。 https://github.com/kouya17/KiCadHelper/releases (ページ中のAssets内KiCadHelper.zipをクリック) 本ソフトが代替する作業 本ソフトは以下書籍(KiCadではじめる「プリント基板」製作)中のp131-p133の作業を代替する。 KiCadではじめる「プリント基板」製作 外川貴規 工学社 2018年02月 売り上げランキング : 楽天ブックスで購入Amazonで購入 by ヨメレバ 具体的には以下の処理を行う。 製造ファイル・ドリルファイルのファイル名統一 拡張子の変更(.drl→.txt、.gm1→.gml) 必要ファイルをzipに圧縮 各ファイル及びzipファイル名は「elecrow-プロジェクトフォルダ名-日付」となる。 zip圧縮前のフォルダはプロジェクトフォルダ下に残る。 使い方 ソフトを起動する プロジェクトフォルダに、すでに製造ファイル・ドリルファイルを出力済みのKiCadプロジェクトのフォルダを指定する zipファイル出力先に、発注用のzipファイルを出力する場所を指定する 開始ボタンを押す 画面下部にログが表示され、処理中にエラー等があればエラーログが出力される。

October 6, 2019 · 1 min

Djangoで記事をカード型で表示するようにした

参考サイト Bootstrap公式ドキュメント https://getbootstrap.com/docs/4.3/components/card/ Card decksの部分をほぼそのまま使った。 css部分は以下のQiitaの記事を参考にさせていただいた。 https://qiita.com/iwato/items/840b831ad66fec0dd4c1 コード html <div class="col-sm-4"> <div class="card card-link post-card"> <a href="{% url 'posts:post_detail' post.id %}"></a> <img class="card-img-top" src="{{ post.middle_image.url }}" alt="thumbnail"> <div class="card-body"> <h5 class="card-title">{{ post.title }}</h5> </div> <div class="card-footer"> <small class="text-muted">published at {{ post.published|date:"Y/n/j" }}</small> </div> </div> </div> 一行に最大3つ記事を表示するためにcol-sm-4を指定している。 記事のサムネイル、タイトル、公開日を表示するようにしている。 css /*div要素全体にリンクをつけるために必要な要素*/ .card-link { position: relative; } .card-link a { position: absolute; top: 0; left: 0; height:100%; width: 100%; } .post-card { margin-top: 5px; margin-bottom: 5px; } カード全体にリンクをつけるために....

October 3, 2019 · 1 min

Djangoでタグクラウドを実装した

参考ページ https://programmer-jobs.blogspot.com/2012/12/djangodjango-taggit.html django-taggitとdjango-taggit-templatetagsがあればできるらしい。 実装した流れ 1 setting.pyを確認し、taggitが導入されていることを確認(taggitは昔すでに導入済み) ただ、taggit-templatetagsは導入されていなかった。 2 pip install django-taggit-templatetagsでインストール 3 setting.pyのINSTALLED_APPSにtaggit-templatetagsを追加 INSTALLED_APPS = ( ... "taggit", "taggit_templatetags", ... ) 4 pip freezeでインストールしたtaggit-templatetagsのバージョンを確認 $ pip freeze ... django-taggit-templatetags==0.2.5 ... 5 requirements.txtに4.で確認したバージョン情報を追記 ... django-taggit-templatetags==0.2.5 ... 6 デプロイ 7 動作確認したらエラー発生 File "...templatetag_sugar/parser.py", line 5, in <module> from django.db.models.loading import cache No module named 'django.db.models.loading' django.db.models.loadingがないらしい。 google先生に聞くと、django.db.models.loadingはDjango1.9で廃止され、現在はdjango.appを使う必要があるようだ。 https://stackoverflow.com/questions/36234635/what-is-the-equivalent-of-django-db-models-loading-get-model-in-django-1-9 8 tamplatetag_sugar/parser.pyを修正 - from django.db.models.loading import cache + from django.apps import apps ....

September 15, 2019 · 1 min

VirtualBox6.0で共有フォルダの自動マウント機能が働かない

概要 VirtualBox6.0で共有フォルダの自動マウント機能がうまく効かなかったが解消した。 問題 VirtualBox6.0は共有フォルダの自動マウントをオンにしてもうまくマウントされないらしい。 https://unofficialtokyo.com/2018/12/virtualbox-ubuntu1804-on-windows/#Ubuntu 今回の解決法 毎ログイン時にmountコマンドを実行する。 https://www.souichi.club/technology/virtualbox-share/ ただ、上記サイト内の記述だとうまくパスワード入力が省略されなかった。 以下のサイトの記述を参考にしたらうまくいった。 https://www.usagi1975.com/31jan172009/ ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習 翔泳社 Amazon Kindle 楽天 楽天Kobo

August 16, 2019 · 1 min

GitHub Pagesを使って静的サイトを公開した

概要 GitHub Pagesを使って簡易ブログを公開しました。 https://kouya17.github.io 構成 公開環境:GitHub Pages 静的サイトジェネレータ:Hugo テンプレートテーマ:aether 雑記 無料でサイト公開できるのはすごい。 静的サイトジェネレータとしてHexoも検討したが、ネット上の情報が中国語中心だったため断念した。 作成物に関する投稿はGitHub Pagesのほうにして、こちらはより雑多なものを扱うことにする。 独習Git 翔泳社 Amazon Kindle 楽天 楽天Kobo

May 2, 2019 · 1 min