はじめに
前回、既存のスケッチ例をもとにPuppyCを動かしてみました。今回はさらにスケッチを書き換えてスマートフォンから動作できるようにします。
- 必要なもの
- スケッチ
- 実行
1.必要なもの
M5StickCとPuppyCを用意ます。
番号 |
商品名 |
価格 |
参考販売店 |
1 |
M5StickC |
1980円(セット) 1650円(本体のみ) |
|
2 |
PuppyC |
2002円 |
2.スケッチ
スマートフォンからM5StickCを呼び出す場合、M5StickCがサーバーに、スマートフォンがクライアントになります。
WiFiServer
M5StickCをサーバーに設定するにはWiFiServerクラスを使用します。
serverという名前でインスタンした例です。引数はポート番号です。HTTPで接続する場合はポート番号80が一般的であるため、80にしています。
(WebサーバのHTTPならポート番号は80、メール受信プロトコルPOP3ならポート番号110、メール送信はポート番号25と固定的に割り当てるのが一般的)
1 |
WiFiServer server(80); |
ポート番号を80ではなく1234などに設定(WiFiServer server(1234))したい場合、そのサーバーにアクセスするためにはwww.AAA.com:1234 のようにコロンとポート番号を記入する必要があります。
server.begin()
Webサーバーとして起動します。
server.available()
クライアント側からアクセスがあった場合に1を返します。この値を用いてクライアントとやり取りを行います。
WiFiClient
クライアントの処理を行うためのクラスです。サーバーにアクセス時に生成します。
1 |
WiFiClient client = server.available(); |
client.connected()
クライアントと接続されている状態かどうかを表します。(接続1:切断:0)
client.available()
クライアントが書き込んだデータのバイト数を返します。
client.read()
クライアントからの情報を1バイトリードします。
client.println()
ASCIIテキストとして可読文字をクライアントに送信します。
htmlについて
クライアント側に表示するhtmlについて説明します。
HTTP/1.1 200
200 はリクエストが成功した場合に返すレスポンスコードです。(204だとNo Content)
クライアントがサーバーにアクセスしたときに GET HTTP/1.1を送信します。それに対する応答です。
form
formは入力・送信フォームを作成する際に使用します。
<form>~</form>の間にボタンを作成します。
フォームに入力されたデータは、送信ボタンを押すことで送信され、サーバー側で処理が行われます。
method
nethod属性はデータの送信方法(HTTPメソッド)を指定する際に指定します。 method属性の値として指定できるのは以下の2種類です。
- get …… 送信内容がURLとして渡される(初期値)
- post …… 本文(本体)として送信される
URLの後ろにクエスチョンマーク( ? )を付けて、それ以降続くにクエリとして送信先ページに渡されます。
今回はGET /? control=Forward(Back,Stop)となります。
input
formを構成するためのタグです。type属性の値に”submit”を設定すると送信ボタンを作成します。name属性とvalue属性に設定した値がmethod属性で指定した送信方法で送られます。
HTTP/1.1 302
302リダイレクトとは、URL転送処理のうち,1時的な転送に用いられる処理のことです。ウェブサーバーは、ページの新しい場所を即座にブラウザーに通知してリダイレクトする必要があります。
マルチタスク
サーバーとクライアントのやり取りと同時にPuppyCを動作させるため、マルチタスクを使用します。xTaskCreatePinnedToCore関数を使用します。
1 2 3 4 5 6 7 8 9 |
BaseType_t xTaskCreatePinnedToCore( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask, const BaseType_t xCoreID ); |
-
pvTaskCode
:loop()関数と並行して動作する関数名を記載します。 -
pcName
:作成した関数のわかりやすい名前を記入します。 -
usStackDepth
:バイト数として指定されたタスクスタックのサイズ。サイズは1024~8192で指定できます。 -
pvParameters
:作成した関数の引数を指定します。ない場合はNULLを指定します。 -
uxPriority
:実行する優先度を指定します。 -
pvCreatedTask
:作成した関数を参照できるハンドラを返すために使用されます。変数はTaskHandle_t型で定義します。 -
xCoreID
:値がtskNO_AFFINITYの場合、作成されたタスクはどのCPUにも固定されず、スケジューラーは使用可能な任意のコアで実行できます。値0または1は、CPUのインデックス番号を示します。M5StickCはドュアルコアなので、0、1が設定可能です。
スケッチ例のPuppyCを変更したスケッチは以下になります。
3.実行
スケッチをM5StickCに書き込みます。スマホでネットワークを確認すると、ssidで設定した名前(ここではm5stickcに設定)が表示されます。
クリックしてアクセスします。パスワードはpassで指定した内容です。
次にブラウザを起動して const IPAddress ip で設定したipアドレスを入力します。
ブラウザに表示されている「Forward」を押すと前進、「Stop」で停止、「Back」で後ろに下がります。