esp8266-arduinoでSD::remove()が固まる件

fsHandlerを作成している際、表記の問題に遭遇した。
原因は、SD.hの108-109行

  // Delete the file.
  boolean remove(char *filepath);
  boolean remove(const String &filepath) { 
    return remove(filepath.c_str()); }

remove(filepath.c_str())でremov(char *filepath)が呼び出されそうだが、
filepath.c_str()の型は (const char *)つまり書換不可文字列。これを (char *)書換可文字列として関数に渡すわけにはいかない。

不幸なことに String型にはconst char *型引数1つだけのコンストラクタがある。このコンストラクタにより、const char *型の文字列はString型に変換され、remove(const String &filepath)、つまり自分自身を呼び出し続けることになるのであった。

SD::exists,mkdir,rmdirも全く同じなので、固まるはず。

ちなみに、version 2.4.0-rc1では修正されている。

  boolean remove(const char *filepath);
  boolean remove(const String &filepath) { 
    return remove(filepath.c_str()); }

回避策は簡単、(char *)にキャストすれば良い。

  SD.remove((char *)path.c_str());  

気持ち悪いのは我慢.

ESP8266WebServer用ファイルシステム・表示ハンドラ

ESP8266 Arduinoでは特にWebServerのライブラリが気に入っている。

これを使うとESP8266を使った機器をブラウザから、とても簡単に操作・参照できる。サンプルプログラムも、よくできていて、独自機能の追加も簡単だ。

ESP8266WebServer葉にSDメモリーや内蔵ROM内のファイルシステム(SPIFFS)をWeb経由で参照、アップロードなどできるハンドラを使って使用してきたのだが、次に作るプログラムで、また使いたくなったので、ライブラリ化を行いGitHubで公開した。

h-nari/FsHandler: arduino library to access spiffs/sd via webServer

ブラウザでアクセスするとこんな感じ。

最終的な製品で、ファイルシステムを全て公開して良いのか、ということは置いて置くとして、開発段階では大変便利。ファイルの中身が簡単に見れるし、アップロードも簡単。

まだ、いろいろ問題はあるかもしれないが、とりあえず公開。

debian 7 wheezyから 9 stretch へ更新

サーバー機で使用しているdebianで、aptutude upgradeとかしても反応しなくなってきた。これは、debianのversionが古くなりすぎたのかと調べたら、メジャーバージョンが2つ上がっていた。使っているのはdebian 7 (wheezy)で、最新は debian 9(stretch)。

システムを残したままのバージョンアップも可能らしいがどうしよう。とりあえず予備機に最新のdebianをインストールし、そこに重要なデータをバックアップしてから考えようと作業を初めると、トラブルもなく、すんなりできたため、ついバージョンアップを始めてしまった。

一度に debian 7 -> debian 9は出来ないらしいので、まずは debian 8まで上げる。 ここまでは特にエラーも発生しなかったが、debian 9に上げるところでエラー頻発。インストール済のパッケージを手動で削除するなど、いろいろ試すが事態は悪化している感じ。ついにapacheのconfigtestも通らなくなり、原因もわからない。

この辺で諦めて、debian 9のクリーンインストールというか、クリーンインストール済の予備機への移行をすることにする。最初は apacheの”Require all granted”あたりにハマり、あとperlとMYSQLのversion upに伴う問題やDBD::Pgのutf8問題などにハマりつつ、大体移行できた。

debianをバージョンアップしても、不要なpackageなどが残り気持ちが悪いので、最初からクリーンインストールをすべきだったのかもと思う。

今回覚えた便利な機能。 df, duコマンドなどで -BG オプションをつけるとディスクの空き、使用量などがGbyte単位で表示される。

HSES-NODE-OLED発売

昨日からHSES-NODE-OLEDスイッチサイエンスから購入可能になった。物はOMMF寸前に上がって来ていたのですが、年末年始のドタバタやHP等の準備で時間がかかってしまった。

HSES-NODE-OLEDのセールスポイントは2つある。1つはGrove Wrapperで固定できるESP8266モジュールであるということ。もう1つは0.96インチSPI接続128x64dot OLEDが付属すること。

Grove Wrapperがあれば、対応した形状の小型基板を、いろんな方法で固定することができる。レゴブロックと組み合わせたり、ネジ止めできたりできるのだが、特に便利だと思うのはGrove Wrapperに磁石をネジ止めしたもの。M3皿ネジ穴付きネオジム磁石を購入し、自分で組み立てた。これを使うと割と強力に固定できるし、簡単に取り外しもできる。身の周りのいろんなところに簡単に設置できる。現在国内でGrove Wrapperを販売しているところは無く、直接SeeedStudioから買うしか入手方法がないようなので、HSES-NODE-OLEDには1個付属させている。ご活用頂きたい。

OLEDは、2.4インチのカラーLCDと比べるとモノクロだし画素数も少ないが、表示の明瞭度、視野角の広さが魅力的だ。それに小さいというところも良い。この手のOLEDにはI2C接続のものとSPI接続のものがあるが、更新速度にこだわりSPI接続のものを使用した。

基板上のピンソケットにはESP-WROOM-02の全I/Oが接続されている。100milピッチに乗っているので市販のユニバーサル基板が使用可能。個人的には、これで色んなハードウェアの実験に使っていきたい。

OLED向けに日本語表示に対応させたライブラリHumblesoft_SSD1306を公開している。また、サンプルプログラム集HSES_NODE_OLED_Sample_programsも、まだプログラムは2つだけだが公開している。

今後、ライブラリの機能拡張、サンプルプログラムの追加を行っていく予定なので、是非一度 HSES-NODE-OLEDを試していただきたい。

基板レイアウト 配線完了

いろいろ恥ずかしいところはあるのですが...
基板設計完了?

終わらないのではないかとも思われた配線作業もついに終了。WinboardのDRC (Design rule check)をかける。わけのわからぬ擬似エラーが山ほどでるのではないかと、心配したが、意外に的確なエラー表示。電源・グランド シュート数箇所、ギャップ不足多数見つかった。しかし、winboardの配線のnetlist的な認識の仕方(意味わかります?)が よくわからない。配線しても、なにかの拍子で 未配線ネットとして表示されることがよくある。配線済みのトラックも3個所以上接続しているものは、分離できちゃうし、どうなってるんでしょうね?この辺のことがわかれば、擬似エラーも消せてもっと楽に作業ができそうに思うのだけど、マニュアルを読んでも書いてない..明日、もう一度チェックして、www.pcbpro.comに 発注だ!