All rights reserved. スクリプト内の処理でエラー終了していたことが主な原因でした。CORSは、付随的な問題であり、主な原因ではありませんでした。
で、あんまり好きじゃないけど、一時期仕事で触っていたGoogle Apps Script(以下GAS)やるか、、となったものの、相変わらずトラップが多いので、備忘録的にまとめようと思いました。, 気が向いたら何回か書くと思いますが、GASの文法とかWebのお作法などは特に触れません。, 重要)スプレッドに書くだけならさして苦労はないものの、レスポンスを返す場合はライブラリ「HttpRedirect」を使う必要があります。(※4), 1)GASのプロジェクトを用意し、Webアプリケーションとして公開する 2)Arduinoに書き込みを行う。, 方法1) スプレッドシートも使いたい場合・スプレッドを起動。メニューの<ツール> - <スクリプトエディタ>を開く, 方法2) 独立したプログラムファイルを作りたい場合・Googleドライブの新規作成で、"Google Apps Script"を選択, https://developers.google.com/sheets/api/guides/concepts?hl=ja, 1)スクリプトエディタのメニュー"公開" -> "webアプリケーションして導入" を開く, Current web app URL: -> 変更する部分はなし。URLはArduinoのコードに記載するので、コードの上の方にでも書いておくのがベター。 /macros/s/●●/exec というルール。Arduinoのファイルに書くScriptIDはこれを使う。 Project version -> Newを選択 ※コードの変更を反映する度に都度更新が必要。GASを書き換えてctrl+Sだけだと、最新に反映されない。 Execute the app as: -> 自分のGoogleアカウントを選択 WHo has access to the app -> Anyone,even anymous を選択, 2)アクセスの許可IDE上の虫マーク横の関数「doPost」を選択して、虫マークをクリックして実行。途中、実行の許可を求められるのでOKする。, ●やること 1)下記のGitHubからHTTPSRedirect.cppとHTTPSRedirect.hとDebugMacros.hをコピーする, 2)HTTPSRedirect.cppの89行目。 //stop();の//を消して実行できるようにする。, ※コメントアウトしたままだと、スプレッドは更新されるがESP32側が停止する。 ※ESP32での動作確認時に変更。もしかしたら8266は変更不要かもしれない。, 参考)https://github.com/electronicsguy/ESP8266/issues/91, GAS側のレスポンスは適当な文字列にしていますが、レスポンスによってESP32で分岐を加えると色々遊べると思います。, ぶっちゃけAWS S3にデータ置く方がはるかに楽だし、マイコンよりもラズパイ使った方が情報も多くて簡単。しかし、ハードを小さく安価に。ソフトもお金をかけたくない。Ambientのようなサービスを使わず自前で用意したいという場合は、もう一周回ってGASでいいやと思いました。, 次回は時間があれば、M5CameraかMaixduinoの画像をGoogleドライブにアップロードなど。, ちなみにGET/POSTがどうとか、Webのお作法的なものを基礎から押さえたいという方は「Webを支える技術」あたり読むのが良いかもしれません。, ※1) 仕事都合により個人で使ってたAWS RDSが、ほんのちょっとしか使ってないのに請求$400overした。 カードの不正利用疑いで一瞬止められてたのもあり、深夜に4-50万と見間違えて死ぬかと思った。, ※2) JavaScriptに対する愛が薄いので、突っ込んだ話はしません。詳しく知りたい場合は検索「EcmaScript GAS」を推奨。, ※3) 多くの企業は情シスが社内ドメイン以外からのGsuiteアカウントへのアクセスに制限をしているはず。, ※4) GASの仕様でdoPost関数使うとリダイレクトが発生するが、ライブラリ「WiFiClientSecure」はリダイレクトに追従しない。 そのため、レスポンスを取ろうとすると、レスポンスコード302で詰まる。, ※4) 書籍もいくつか出ているけれど、特に買う必要はないと思う。仕事のために数日で覚えるために買ったけれど、あまり必要なかった。, PythonでMIDIを作ってYAMAHAのTENORI-ONをごにょごにょするよ。, bastardeyesさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog
クライアントから発せられたリクエストには様々なものがあるが、その中で今回はPOSTというリクエストが来た際の処理について説明する。, クライアントからのリクエストはサーブレットに渡され、そのサーブレットがリクエストの中にあるメソッドに対応した処理を行う。リクエストに含まれるメソッドには、次の図が示すようにGET、POSTなどいくつかの種類がある。そのひとつがPOSTリクエストである。, POSTリクエストは、HttpServletクラスを継承したサーブレットクラスで処理される。このサーブレットクラスで、POSTリクエストに対応した親クラスのHttpServletクラスのメソッドdoPost()をオーバーライドして、要求にあった処理をさせる。, この例では、サービスメソッドのdoPost()をオーバーライドしている。このdoPost()メソッドの中に、レスポンスとしてクライアントに返すデータの処理や表示する画面をHTMLで記述することになる。, ここでは、POSTリクエストに対応したメソッドdoPost()を取り上げている。そのAPI仕様を見る前に、doPost()の処理の流れを大まかに見てみよう。, POSTリクエストの処理するdoPost()は、サーバーにあるデータベースなどの情報を更新する処理のために使われる。クライアントから送られてくる画面入力情報は、GETとは違って外部から見えないので、クレジット番号などの入力に使える。処理の流れは次のようになっている。, doPost(HttpServletRequest req, HttpServletResponse resp), サーブレットにPOSTリクエストを処理させるためにサーバー(サービスメソッド経由)によって呼び戻される。, HTTP POSTメソッドは、無制限の長さのデータをウェブサーバーに一回で送信する、そして、クレジットカード番号のような情報を知らせる時に役に立つ。, このメソッドをオーバーライドする時、リクエストデータを読み、レスポンスヘッダーを書き、レスポンスのためのライターまたは出力ストリームオブジェクトを取得して、そして最後に、レスポンスデータを書く。Content TypeとEncodingを含むことがベストである。プリントライターオブジェクトを使う時、プリントライターオブジェクトにアクセスする前にContent Typeを設定する。, req -クライアントが生成するサーブレットへのリクエストを含む HttpServletRequestオブジェクト, resp - サーブレットがクライアントに送る返信を含む HttpServletResponseオブジェクト, java.io.IOException - もしサーブレットがリクエストを操作する時に、入力あるいは出力エラーが検出されるならば。, ServletException - もしPOSTのためのリクエストが処理できなかったならば。, このサンプルプログラムは、サーブレットにHTMLで書かれた画面からGETリクエストとPOSTリクエストを選んで送信することができるようになっている。, GETリクエストかPOSTリクエストの送信を選択するHTML画面表示のためのコードがservletget.htmlである。GETリクエストの送信は次のようなコードになっている。,