2020/01/02

ようこそお越しー>そして、はてなブログに戻る。。

 ようこそお越しくださいました。日々のいろんなことを、記録用にブログの記事として書いています。今日までいろんなBlogサービスを転々と渡り歩いて、rev5になりました(4度目の引っ越し。。らしい)
 IT関係の技術職のへなちょこサラリーマン(すぐに精神的にめげる、しかも56)ですが、質問等ありましたら分かる範囲で回答しますのでコメントに記載ください。

補足:
 これまで、はてなダイアリーを使っていましたが、はてなダイアリーが近々サービス終了とのことで、はてなブログに引っ越ししました。はてなブログに移ったものの、勝手分からず、結構広告があちこちに差し込まれて見づらいので、だったら(良いか悪いかは置いといて)GAFA様のサービスに乗っかるのもいいのでは?と思うに至りました。Bloggerだったら当分安泰だろうとこちらのサービスを使わせてもらう予定です。

 今回から使うことにしたBloggerですが、無料ブログサービスの比較記事では、Bloggerはあまり評価高くないようです。宣伝が出ない点、カスタマイズ性の高さは優れていると評価されていますが、コミュニティ機能がないので、集客性が非常に低いためらしいです。まぁ自分のブログは備忘録+検索で見つけた人が訪れる程度なので、、自分の好みに合うようにBloggerを少しずつカスタマイズして使っていこうと思っています。。結局GAFAからは逃れられないのか。。はー

■ご参考URL
 引っ越し元は、はてなブログ:茶国 でございます。
 https://chakoku.hatenablog.com/

 これまでのブログサービス経緯:
 レンサバ上でblosxom(初版)→NTTデータのDoblog(rev2)→はてなダイアリ(rev3)→はてなブログ(rev4)→Blogger(rev5)

■追記
 2日間使っただけですが、、Bloggerは結構自分好みと思いました(手に馴染むというか)。広告入らないので編集もはかどる印象。だけど、カスタマイズがかなり難しそう。ソース引用の表記とかもHTMLで自分でやれよということか。。

■追記(190814)
はてなダイアリーがクローズとなって、はてなブロクに移ったものの、広告が辛くてBloggerのお世話になっていました。が、、Bloggerがやっぱり使い慣れないのと、なんかシーンとして寂しいので、はてなブログに戻ることにしました。行ったり来たりですみません。
https://chakoku.hatenablog.com/

2019/07/21

はてなブログへの帰還。。。

はてなブログの広告表示が辛くて、広告の入らないBloggerに移ってきましたが、どうもやっぱりUIが使い慣れないし、なんかBloggerは寂しいくて、無駄話レベルだと全然書く気に慣れず、、、で、、はてなブログに戻ることにしました。また、はてぶの方を見てください。
戻り先ー>https://chakoku.hatenablog.com/

行ったり来たりですみません。

2019/06/01

ESP32 + CMOS Camera(OV7670 w/FIFO)

ESP32 に CMOS Camera(FIFO 7670)を接続してmicroPythonで制御してみる。これはもう作例が多くて陳腐化した構成なのだが。。 敢えて言うと、、Arduinoでの実装は多いが、microPythonで扱う事例が少ないというぐらいか。。 microPythonだとループが遅いので、FIFO無しだと水平同期中にCMOSカメラからの画像データを 引き抜けないのでFIFOが必要。FIFOがあれば読み出しクロックでデータの引き抜きを遅延させることができる。
試作しているけど、めちゃくちゃ描画が遅い。しかも、、FIFOのR/Wタイミングがおかしいのか、水平同期が狂ったような画像になっている。。うーーむ。。

OV7670の仕様書
http://e-structshop.com/structwp/wp-content/uploads/2014/12/OV7670_DataSheet.pdf

I2Cの仕様書
https://www.nxp.com/docs/ja/user-guide/UM10204.pdf

かなり近い実装(これは多分microPythonではなくArduionoだろう)
http://bitluni.net/ov7670-with-fifo/

http://embeddedprogrammer.blogspot.com/2012/07/hacking-ov7670-camera-module-sccb-cheat.html

https://os.mbed.com/users/diasea/notebook/ov7670_FIFO_AL422B/

https://forum.arduino.cc/index.php/topic,159557.0.html
https://www.play-zone.ch/en/fileuploader/download/download/?d=1&file=custom%2Fupload%2FFile-1402681702.pdf
https://github.com/dalmirdasilva/ArduinoCamera/blob/master/CameraAL422B/datasheet/OV7670%20Implementation%20Guide%20%28V1.0%29.pdf

■追記
水平同期がおかしいのは、COMSカメラでキャプチャしたWidth,Heightが当初の想定とちがっていたから。OV7670は設定できるレジスタ数とパラメータが山盛りで、どれが最適値なのか全然わからない。ちょっと間違えると絵がおかしくなる。これまでレジスタの設定値が不適切ため、シュールなモアレ模様が撮れていた。これは、結線とか、エンコードミスではなく、単に設定パラメータが間違っていたためであった。


大元の記事:
CQ出版社 「トランジスタ技術」 2012年 3月号

https://synapse.kyoto/glossary/glossary.php?word=74HC165

2019/05/18

ESP32-DevKitにmicropythonをインストール、esptoolで焼いてみる

普段はGUIのフラッシュライタ(flash_download_tool)でファームを更新していたが、、pythonで書かれたesptoolでESP32-DevKitのファーム更新をしてみる。 esptoolは以下のGITにあるが、、 https://github.com/espressif/esptool pipでも入るそうである。自分の環境はCygwinでpythonをあれこれ入れてかなり環境がおかしくなっていので、フルパスでpipを起動しないとエラーになる。
 /usr/bin/pip2.7 install --upgrade pip
 /usr/bin/pip2.7 install esptool
コマンドは以下(micropythonサイトより)
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-20190125-v1.10.bin
cygwinの場合、人にもるかもしませんが、自分のcygwinでは、/dev/ttyS10のようである。
$ esptool.py --chip esp32 --port /dev/ttyS10 erase_flash
esptool.py v2.6
Serial port /dev/ttyS10
Connecting....
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 30:ae:a4:ca:da:18
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 9.3s
Hard resetting via RTS pin...
次にファームを焼いてみる。 http://micropython.org/download#esp32 esp32-ppp-fix.bin (latest) が最新らしいので、、素直にこれを選択。
$ esptool.py --chip esp32 --port /dev/ttyS10  write_flash -z 0x1000  esp32-ppp-fix.bin
esptool.py v2.6
Serial port /dev/ttyS10
Connecting........_
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 30:ae:a4:ca:da:18
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1147552 bytes to 717585...
Wrote 1147552 bytes (717585 compressed) at 0x00001000 in 63.7 seconds (effective 144.2 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
手動でフラッシュを焼いてた時は、ENとBOOTピンをGNDに落として電源OFF/ONしてCPUのモードを切り替えて、、とやっていたけど、DevKitのボードでは手動リセットが不要のようである。これは、DTS/CTS等でEN/BOOTを操作してくれているから?? 回路図みないとどういうからくりなのかちょっと分からず。 uPythonから再起動させてみた。バージョンは、 v1.10-331-ge38c68310-dirty 。。dirtyって何?
>>> machine.reset()
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:4936
load:0x40078000,len:9332
load:0x40080400,len:6216
entry 0x400806e8
I (432) cpu_start: Pro cpu up.
I (432) cpu_start: Application information:
I (432) cpu_start: Compile time:     23:54:40
I (434) cpu_start: Compile date:     May  8 2019
I (440) cpu_start: ESP-IDF:          v3.3-beta1-268-g5c88c5996
I (446) cpu_start: Starting app cpu, entry point is 0x40082844
I (438) cpu_start: App cpu up.
I (457) heap_init: Initializing. RAM available for dynamic allocation:
I (464) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (470) heap_init: At 3FFB9B88 len 00026478 (153 KiB): DRAM
I (476) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (482) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (489) heap_init: At 40093398 len 0000CC68 (51 KiB): IRAM
I (495) cpu_start: Pro cpu start user code
I (66) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
MicroPython v1.10-331-ge38c68310-dirty on 2019-05-09; ESP32 module with ESP32
Type "help()" for more information.
慣れたらCUIでファーム焼く方が楽。バッチ化もできるし。

ESP32 初期状態でのブートメッセージ

購入したばかりのESP32-DevKitC-32Dで電源ONした際のブートメッセージを記録。今後microPythonを焼てしまうのでもう同じメッセージは出ないと思われ。


ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3ffc0000,len:0
load:0x3ffc0000,len:2304
load:0x40078000,len:3788
ho 0 tail 12 room 4
load:0x40098000,len:532
entry 0x4009813c


**************************************
*       hello espressif ESP32!       *
*        2nd boot is running!        *
*            version (V0.1)          *
**************************************
compile time 18:16:58

  SPI Speed      : 40MHz
  SPI Mode       : DIO
  SPI Flash Size : 4MB
Partition Table:
## Label            Usage          Type ST Offset   Length
 0 factory          factory app      00 00 00010000 00100000
 1 rfdata           RF data          01 01 00110000 00040000
 2 wifidata         WiFi data        01 02 00150000 00040000
End of partition table
Loading app partition at offset 00010000
section 0: paddr=0x00000020 vaddr=0x00000000 size=0x0ffe8 ( 65512)
section 1: paddr=0x00010010 vaddr=0x3f400010 size=0x05b64 ( 23396) map
section 2: paddr=0x00015b7c vaddr=0x3ffba720 size=0x01378 (  4984) load
section 3: paddr=0x00016efc vaddr=0x40080000 size=0x00400 (  1024) load
section 4: paddr=0x00017304 vaddr=0x40080400 size=0x126ac ( 75436) load
section 5: paddr=0x000299b8 vaddr=0x00000000 size=0x06658 ( 26200)
section 6: paddr=0x00030018 vaddr=0x400d0018 size=0x325b4 (206260) map
start: 0x400807ac

Initializing heap allocator:
Region 19: 3FFBBA98 len 00024568 tag 0
Region 25: 3FFE8000 len 00018000 tag 1
Pro cpu up.
Pro cpu start user code
nvs_flash_init
frc2_timer_task_hdl:3ffbc564, prio:22, stack:2048
tcpip_task_hdlxxx : 3ffbeca8, prio:20,stack:2048
phy_version: 80, Aug 26 2016, 13:04:06, 0
pp_task_hdl : 3ffc34f0, prio:23, stack:8192

:>enter uart init
uart init wait fifo succeed
exit uart init

IDF version : master(db93bceb)

WIFI LIB version : master(934d079b)

ssc version : master(r283 4d376412)

!!!ready!!!
mode : softAP(32:ae:a4:ca:da:18)
dhcp server start:(ip: 192.168.4.1, mask: 255.255.255.0, gw: 192.168.4.1)

+WIFI:AP_START

2019/05/12

土曜日の楽しみ、、NHKのドラマ「腐女子、うっかりゲイに告(コク)る」

普段はドラマ見ないのですが、BL好きな女子が男子に告白したけど、相手が芸だったというドラマ。これは面白すぎて(というと不謹慎でしょうか)、映像の作りが非常に細やかで、心を追いかけており、見ずにはおれない。
NHKとしてはラブシーンとかかなり踏み込んで映像化している印象。二人はまだ高校生だけど、お互いがどこまで分かり合えるのか。。これからの話の展開が非常に気になります。ちなにみに、、無料コミックはPixiv等で読めるようです。

ご参考URL
腐女子、うっかりゲイに告(コク)る。 (NHKサイト)
https://www.nhk.or.jp/drama/yoru/fujoshi/

彼女が好きなものはホモであって僕ではない(Pixiv)
https://comic.pixiv.net/works/5500

彼女が好きなものはホモであって僕ではない(Amazon)

2019/04/27

1.8inch SPI TFT液晶をESP32に接続する

Amazonで購入した、1.8Inch SPI接続のTFT液晶をESP32につないで表示させたい。
商品名は、KMR-1.8 SPI ?  乗ってるチップはST7735Rらしい。

Amazonでの商品名:

HiLetgo 1.8インチ ドライバ IC ST7735R SPIインタフェース 解像度128*160 TFT液晶ディスプレイモジュール 


基板にはSPI用の接続端子が出ているのだが、、A0をどう使うのかちと分からず。
さらに調べると、SPIの仕様としてはMOSI/MISO/CLK/CSの4本であるが、A0はData/Commandの識別信号のようであった。7735Rの仕様書によると、A0を使わない接続の場合は、SPIで送信するデータの先頭ビットをData/Commandの識別ビットとして使うようである(ST7735Rの仕様書,P34あたり)。さらに、HiLetgoの液晶基板の接続端子はMOSI/CLK/Reset/CS/A0(DC)であり、MISOが無いので、ST7735Rからの出力は受け取れない。ということは、、ST7735Rのレジスタが読めないのでデバッグができない。なんという仕様だろうか。。自分でドライバを書くのはやめて(そもそも自作だと品質も怪しいが)、先人の作ってくれたのをそのまま使うことにする。

https://www.rockbox.org/wiki/pub/Main/SonyNWZE370/ILI9163.pdf
https://cdn-shop.adafruit.com/datasheets/ST7735R_V0.2.pdf
https://s3-ap-northeast-1.amazonaws.com/sain-amzn/20/20-011-920/TFT18.rar

https://buildmedia.readthedocs.org/media/pdf/adafruit-circuitpython-rgb-display/latest/adafruit-circuitpython-rgb-display.pdf
AdafruitRGB DisplayLibraryDocumentation

https://github.com/adafruit/Adafruit_CircuitPython_ST7735

まずは、、Adafruitが提供してくれている、ST7735用ドライバを使ってEPS32上のMicroPythonで動作できるかを試してみる。

Adafruitが提供してくれているST7735用ドライバを使って、ESP32+TFT液晶の表示が行えた。使ったクラスは、ST7735Rではなく、ST7735の方。ただ、、白い線が入っていてどうも初期不良のようである。他のドライバでも試してみるつもりだが。

白線の件は一旦おいといて、、
シリアルカメラ(4D Systemの uCAM-IIIを買いなおした)で取得したRAWイメージを表示させるとどうも色合いがおかしい。シリアルカメラはRGB565という形式で、R:5+G:6+B:5の並びで16ビット表現になっているのだが、調べてみると、買った液晶は、B:5+G:6+R:5と、RとBが逆転して表示されている。
 lcd.fill(0xF800)ー>R:11111なので、赤色に塗りつぶされるべきだが液晶は青になる
 lcd.fill(0x001F)ー>B:11111なので、青色に塗りつぶされるべきだが液晶は赤になる
これは液晶のせいというより、ドライバの設定がそうなっているためと思われる。先人の記事でも色が入れ替わっているという指摘を目にすることがあり。。ドライバに手パッチを当てるとなんとかなりそうだが。

https://cycle.eek.jp/mbed/aitendo-18TFT  サイクルきゃあ様より引用
ST7735のレジスタにMADCTL(36h)という(Mode Controlの略だろう)のがあり、そこのbit3にRGBビットがあることを発見。RGBにするか、BGRにするかの選択し、ここがBGRのほうに設定されているので、そこをな直したら、全部正常になった。Color指定でBlueと書いてるのにRedになったり、それもなくなった。
 上記を参考に手パッチを当てたらなんとかなるかも。

ST7735R_V0.2.pdf の仕様書中、
P113 に以下の章があり、D3がRGB/BGRの切り替えフラグのようである。
10.1.27 MADCTL (36h): Memory Data Access Control

Adafruit_CircuitPython_ST7735 のソースを再確認すると、以下の記述があり、bottom to top refreshしたければ、D4を変えるべきで、(0x10)、0x08を指定するとRGB反転させている。。。ドライバが間違ってると思われる。。(このソースはもうメンテされていないし)
file:st7735.py  75行目:
        (_MADCTL, b'\x08'), # bottom to top refresh  ー>0x10 とすべきでは

st7735.pyのMADCTLを0x10に修正すると液晶のRGB表示も正しくなった。。はぁーー
サイクルきゃあ様に感謝。。 下の写真が白線が入った液晶。買ってからしばらく使ってなかったのだが。。やっとつないでみたら白線が入っていて、画面クリアさせても消えない。電源Off/Onしても同じ所に出てくる。さらに、、本数が増えた。