Team for GR-PEACH Producer Meeting

HTTPSのサンプル動かしてみました

03 Dec 2014

HTTPSでWebサーバにアクセスするサンプル・プログラム作ってみました。 よかったら試してみてください。

http://developer.mbed.org/users/takashikojo/code/GR-peach-HTTPClient/

プログラムをインポートすると、必要なクラスライブラリ一式もインポートされるはず、 main.cppのSERVER_URLを適当に書き換えてコンパイルすれば動く、はずです。

以下、多少の注釈:

- mbed-rtosは、初期スレッドのスタックサイズをデフォルトより大きくしています。

- mbed-srcは特に変更してませんが、元バージョンのほうの改版が頻繁なようで、 タマタマ今の最新バージョンでは動きませんでした。ここしばらくはアップデートせず、 上記と一緒にインポートされるバージョンを使ったほうが安全みたいでした。

- HTTPClientクラスは、Cookbookのものとほぼ同様の使い方です。URLの指定が "https://,...” の場合は、ポート443へのアクセス、SSLの処理などHTTPSの処理が 走るようになっています。詳細は、http://developer.mbed.org/users/wolfSSL/code/HTTPClient/ を 参照してください。

- SSLライブラリにはwolfSSL社(www.wolfssl.com/jp)のものを使っています。 デュアルライセンスなので、社内評価、個人使用など非商用に限って無償オープンソースです。 詳しくは上記サイトに問い合わせお願いします。

こじょう

03 Dec 2014

ファームウェアの書き換えがどうしてもできないので、標準ファームでしか試していませんが、ロード時に「項目が見つかりません」のエラーになってしまいます。インポートのほかに何か設定が必要でしょうか?

05 Dec 2014

「ロード時」というのは、GR-peachへの「ダウンロード時」ですか?

こちらはファームウェア書き換えたものですが、関係あるかなぁ。そのへんわたしもよくわかっていませんが、...

(こちらもJP2ショート、ちょっと嵌りました!その割に、書き換えたファームもダウンロードあんまりスムーズではないです)

試しに別のmbedユーザでインポートして特に他の設定無しで単純にコンパイル、(同じボードにですが)ダウンロードしてみましたが、 一応、動きました。

画面右上のコンパイラ環境ボタン、GR-peachになってますか? 「項目がみつかりません」エラーの画面ショットがあると少しわかるかも、です。

こじょう

05 Dec 2014

もしかすると、,

エクスプローラの「項目が見つかりません」エラーですね。 わたしの場合、GR-peachをUSBにつなぎなおしてmbedドライブが認識してから、 エクスプローラの「新しいウィンドウを開く」で新規に開いたウィンドウのmbedに D&Dするとうまく行くケースが多いです。なんだかおまじない的ですが、お試しください。

(いずれにせよ、ダウンロード開始まで結構待ちます)

こじょう

05 Dec 2014

ちょっと気になったのですが、 私も確認しましたが、最新版のEthernetInterfaceを使うとコンパイル通りませんね。 古いバージョンですと、NTPClientは動作しました。 また、SimpleSMTPClientも動作できませんね。 時間がなく、原因追及までできていませんが、報告にまで、 よろしくお願いします。 やましょう。

05 Dec 2014

情報ありがとうございます。わたしも中の人では無いので、正確なところはわかりませんが、...

HTTPClientの場合、以下2点を修正したら動きました。

1) 初期スレッドのスタックサイズ拡張

 EthernetInterfaceを使う場合、main関数はデフォルトでrtosの初期スレッド扱いになっていると思います。 デフォルトのスタックサイズは2kバイトと非常に小さいみたいで、簡単にスタックオーバーフローを 起こすと思います。

mbed-rtos/rtx/TARGET_CORTEX_A/ARM/RTX_Conf_CA.cの64行目あたりの#defineを

  #define OS_MAINSTKSIZE (512*16)

として、32kバイトに拡張しました(数値の4倍がバイト数になるみたい)。

2) HTTPClientでは、tcpのsend直後にrecvしようとするとフリーズしました。

HTTPリクエストのsend後、wait(0.1) したら動きました。 もしかしたら、SMTPその他でも同様のことがあるかもしれません。 また、TCPディスコネクトした直後に、次のtcpのconnectに行くとうまくコネクトしてくれないみたいです。こちらの場合、wait(0.5)を入れて回避しました。

上記二点は、なんとなくですが、相手からのACKをきちんと受信していないうちに次の要求を出すと だめみたいな気がしてます。

なお、最新版のEthernetInterfaceはこちらでも試してみましたが、上記の変更後では特に問題ありませんでした。

こじょう

05 Dec 2014

/media/uploads/ahidaka/bun-error2.png /media/uploads/ahidaka/bun-error.png ビルドし直したり、EthernetInterfaceをUpdateしてみたり、コピーの仕方を変えてみたりしたのですがやはり100%だめですね。 GR-peach-HTTPClientのプログラムだけが、ロードの最後のところでエクスプローラーのエラーとなります。 ほかのプログラムは問題なくロードできて動作しています。といってもLEDやPrintfなどのサンプルばかりですが。

Windows 8.1のマシン環境のせいかも知れないので、後で別のマシンでも試してみます。

08 Dec 2014

他の書き込みにもある通り、Windows 8.1が原因でした。Windows 7で試したところ、問題なくロードできるようになりました。

しかし私の環境ではどうもそのままでは動作しない様です。最初のPrintf()が表示されないので、少しずつデバッグして行くしかありません。コンパイルはOKです。

10 Dec 2014

こじょう様、昨日はありがとうございました。 昨日お借りして試したボードと動きが明らかに違い、やはりシリアル接続手順を見直しいろいろ変えても一文字もprintf()で表示されないので、恐らくファームウェアのバージョンが違うのが原因だと思われます。

非常に難しいのですが、ファームウェア更新をまた試してみます。