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を試していただきたい。
基板レイアウト 配線完了
![]() |
![]() |
最近のコメント