OMMF2016参加報告

12月3日(土),4日(日)岐阜県大垣市ソフトピアジャパンセンターで開催されたOogaki Mini Maker Faire 2016に参加、出展した。

前日の2日午後8時20分発の高速バスで熊本を出発、3日午前7時半ごろ名古屋名鉄バスセンターに到着。JRで大垣へ移動、駅前のロッテリアで朝食を食べ、バスの時間が合わなかったので徒歩で会場に向かい、9時過ぎに到着。展示物を整え、石川さん骸骨くんと話などをしつつ12:00の開会を待つ。

続きを読む… »

温度計プログラム完成

HSES-LCD24のサンプルプログラムとして温度計が完成、githubに公開した。まずは、画面を見て貰おう。

161124a1i
画面には、日付、時刻、温度センサーから取得した4つの温度と、その平均値、温度変化のグラフが表示されている。グラフには当日のデータに加えて、前日のデータもグレイで表示されている。
続きを読む… »

arduino用にsscanf関数のサブセットを作成

d161118a1C/C++のプログラムで簡単な文字列解釈が必要になった時、sscanf()で処理しているのだが、esp8266 arduino環境だと使えない。コンパイルは通るがリンク時にエラーとなる。仕方がないので strtol()関数などで凌いでいたのだが、浮動小数点の解釈をする必要があり、StringのtoFloatの説明を見ているうち、段々腹が立ってきて、sscanf()のサブセットを作ることを思いついた。

toFloat()で許せないのは、数字として解釈できなかった場合0を返すだけで、元の文字列を見ないと数字だったのかどうかわからないこと。解釈できたかどうかをbool値で返し、値は引数に変数のポインタを渡して返すべきだと思う。
続きを読む… »

SPI3台使いは、ちょっと大変

d161117a2HSES-LCD24ではESP8266(ESP-WROOM-02)のSPIに3つのデバイスが接続されている。TFT LCDとTouchscreenとSDカードスロットの3つだ。1つづつの動作確認は済んでいるのだが、今回初めて3つのデバイスを同時に動作させるプログラムを作ろうとしてトラブった。

各デバイスのライブラリーは、いろいろ提供されている。、SPI接続のライブラリーは基本的にSPIに複数のデバイスが接続されていることをあまり考慮していないので、使用の際には注意が必要だ。

まず、SPIデバイスのCS信号に接続されている端子は、初期化時にHighを出力されるようにされるが、そのまま初期化処理を続行されてしまうので、デバイスの初期化処理(biginメソッド?)を順次呼び出すと、他のデバイスのCS信号が未初期化、INPUTモードでハイインピーダンス状態でSCLK/MOSI/MISOに信号が出てくることになりMISO信号の衝突がありえる。よって、全部のCS信号を自分でHigh出力状態にしてやる必要がある。

続きを読む… »

cygwin上でArduinoOTA動作

161114a1ArduinoOTAというのは、OTA(Over The Air)無線経由でArduinoでコンパイルしたプログラムをターゲットに書き込む機能らしい。存在は、前から知っていたが、ROM容量を倍使うとか読んだことがあって、そうなると日本語フォントを使用するプログラムでは容量的に非常に苦しい。ということで、手を出さなかったのだが、今、作業しているプログラムは日本語無しでも行けそうなので、組み込んでみることにした。

続きを読む… »

esp8266/ArduinoのRTC

f161108a1ESP-WROOM-02等で使用するesp8266/Arduinoでは、サンプロプログラムにNTPClienttが含まれていることもあり、現在の時刻を取得するRTC(Real Time Clock)は自分で作成するものだと思い込んでいた。

時刻を取得するたびにntpパケットを飛ばすのもどうかと思うので、ntpパケットは適当な間隔で飛ばして、millis()関数とのオフセットでも管理することになるのかな。ntpサーバ1つだけだと嫌だな、とか色々考えているうち、偶然 esp8266/Arduinoの中にtime.cというファイルを発見。configTime()関数で、サーバーやタイムゾーン等を設定してやれば、time()関数でUNIX時間を取得できそう。
続きを読む… »

RSS表示プログラム

161107a2HSES-LCD24用にRSS表示プログラムを作成し、GitHubで公開した。

RSS表示プログラムは、ニュース/Webサイト、Blog等の更新情報であるRSSを表示させるプログラムで、ニュース等のタイトルだけ、表示させ続ける電光掲示板でみかけるやつである。PCでは普通の機能だが、ネットワーク接続された表示装置にとっては、その機能をうまくアピールできる有難いプログラムである。

HSES-LCD24用にRSS表示プログラムを作るにあたって、日本語表示機能やスクロール表示機能は作成済みなので、残る必要な機能はRSSのパーザぐらいである。これも昔C言語作成したSAXっぽいプログラムがあったので、C++に書き直し、PC上でデバッグ&テストを済ませたのち、ESP8266/Arduinoに組み込んだ。なおRSSはサイト毎に読み込み、20Kbyte程度のバッファに蓄えたのち、1記事あたり5秒づつ表示させている。

最後に、時刻の表示機能も欲しくなり、自作する必要があるのかと調べたら、簡単に使えるntp同期の時計がESP8266-Arduinoに組み込まれていることがわかり、使用した。これについては、また、別記事で紹介したい。

161107a6m

RSSも表示できるHSES-LCD24はスイッチサイエンスにて絶賛発売中です。

ILI9341のスクロール機能

fig161103a2ILI9341には,画面をスクロールさせる機能がある。VerticalScrollDifinition(33h)コマンドで、上下の非スクロールエリアの幅を設定(リセット時は0)。VerticalScrollStartAddress(37h)コマンドでスタート位置を設定すれば、Vertical Scroll Areaの表示を自由にスクロール(回転?)表示できる。

続きを読む… »

パーツケース整理

161102a0パーツケースの中身は、適宜、必要なものに入れ替えているのだが、入れ替えすぎて順番がめちゃくちゃ。探すのに時間がかかるようになったので、ラベルをエクセルで作り直し、順序も探し易いように入れ替えた。

と比べると、ネジ、スペーサが増えている。これは、在庫が増えたというよりも、探し回ることが多いので、パーツケースに領域を確保して探し易くしたということ。

今後も状況に応じて、パーツケースの中身はどんどん入れ替えていきたい。部品の在庫は最小限にしたい。

OMMF出展します

12月3日(土),4日(日)大垣で開催されるOogaki Mini Maker Faire 2016に有限会社ハンブルソフトとして出店します。HSES-LCD24の各種サンプルプログラム実演、アウトレット品特価販売、間に合えば新製品などの展示を行いますので、可能な方は、是非お越しください。

WiFiのSSIDをスキャン

161020a6ESP8266 ArduinoにWiFiのSSIDをスキャンする機能は、あるよね、と探してみたら、当然ながらあった。SCANクラスというものがあり、Arduinoの同名のライブラリを若干拡張してあるらしい。サンプルプログラムはWiFiScanというのがあって、何の問題もなく動く。結果はシリアルポートに出力される。

それだけでは、何なので、HSES-LCD24の液晶に結果を表示するようにしてみた。プログラムは、GitHubで公開している。 改造点は,表示順を信号強度順にソートしたぐらい。あとはひたすら、見た目が良くなるように調整した。液晶の解像度が320×240もあるので、凝ろうと思えば、かなり凝れる。

実用的な価値があるかどうかは別にして、ちょっとそれっぽい表示になったと思う。自宅で動かしても、かなり多くのSSIDが表示されることに驚く。ノイズが減るのか、深夜になると10を超えるSSIDが表示される。あと、別のESP8266と思われるSSIDが表示されている。これはセンサーを繋いで、WebClientとして動いているやつで、AccessPointとして動いているとは思わなかった。そのうち、調べてみたい。

161020a3

HSES-LCD24のタッチスクリーンを使う

タッチスクリーンを使おうとすると意外に大変だ。HSES-LCD24のLCDモジュールではXPT2046というチップ経由でタッチスクリーンのデータを読み込む。XPT2046のライブラリは複数あり、その点では苦労しないのだが、その次にcalibrationの問題がある。自分ひとりで使う、使い捨てみたいなプログラムであれば、実測値を使い、定数をプログラムに埋め込んで解決だが、人に使いやすいライブラリを提供しようと思うと、それではまずい。LCDの座標系を90度づつ、4方向に設定可能かだから、calibrationも、それに対応する必要がある。毎回、calibrationするのは面倒なので、結果は不揮発性メモリに保存しておきたい。さらに、ちょっと見栄えがするサンプルプログラムを付けようとすると、ボタンやメニューも扱える簡易ウィンドウシステム的なものも欲しくなる。
続きを読む… »

Seeed Grove System

160922a0I2Cのデバイス、基板を扱うことが増えて来た。共通のインターフェース、コネクタが欲しいけど4Pinで有極の使いやすいコネクタはないものかと探していて、SeeedのGroveシステム用のコネクタ(これとかこれ)に行きついた。ケーブル類も安価で売っているし、I2Cデバイスもいろいろあるので、それらを使うこともできる。

自作でいろいろ使う前に、本物を一度使ってみようと、GROVEシールド温湿度センサを買ってみた。

シールドを見ると、Grove Systemがどういうものなのかよくわかる気がする。GNDと電源とマイコンの信号線2本。信号線はデジタルI/Oか、ADのアナログ入力か、I2Cかの3種類。電源は3.3Vか5V。良くできたシステムだと思う。

あと、Grove Wrapperというものがあって、小さい基板をうまく固定することができる。これは大発明だと思うのだが、スイッチサイエンスでは、何故かまだ扱っていない。早く売って欲しい。まぁ私はSeeedから買ったので良いのですが。

生活に小型ディスプレーを!!

160810a6スイッチサイエンスからHSES-LCD24-FRAMEが発売された。これは、HSES-LCD24を100円ショップのフォトフレームに固定するためのアクリル板とネジとスペーサのセット。これがあれば、WiFi接続小型ディスプレーHSES-LCD24を生活空間に自然に置くことができる。見やすい角度に設置するのに苦労したり、USBケーブルに振り回されたりすることも無くなる … はず。

このフレームの発売はHSES-LCD24自体の企画当初から予定していたのだが、スイッチサイエンスへの委託販売(マーケットプレイス出品)が初めてだったので、まず本体を発売してからと思っていたら、梱包上の問題が発生するなどして遅くなった。
続きを読む… »

Adafruit_ILI9341に漢字表示機能追加

160907a0Adafruit_ILI9341クラスを拡張し、fontxの描画機能を組み込み、漢字を表示できるようになった。クラス名はHumblesoft_ILI9341でGitHubで公開している。zipでダウンロードし、Arduino で”.ZIP形式のライブラリをインストール”すれば使えるようになるはず。
続きを読む… »