質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

1018閲覧

M5StackからGoogleスプレッドシートに送信する

kikik

総合スコア24

AppleScript

AppleScriptは、アップル社が開発しているMac OS用のスクリプト言語。AppleScript本体に限らず、同じ言語で多くのAppleScript対応アプリケーションを操縦することが可能です。 自然言語(英語)に近い構文を持ちます。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2023/01/18 07:00

編集2023/01/18 19:21

前提

http://toolware.jp/m5stack-spreadsheet/
にあるM5StackからGoogleスプレッドシートに送信するコードを実行してみたのですが
ERRORが出て送信できません解決策を教えていただけないでしょうか。

実現したいこと

下のソースコードの18行目のif文の中身を実行する

発生している問題・エラーメッセージ

実行すると様々な文字が出てきた後に
MainLoop
Response : ERROR
と出て終わる

Arduinoに書いたコード
if (client.connect(host, 443))
が原因だと思うのですが解決策がわかりません。

該当のソースコード

http://toolware.jp/m5stack-spreadsheet/
にも書いてあります。
Arduinoに書いたコード

#include <M5Stack.h> #include <WiFiClientSecure.h> //****** ネットワーク関連 ****** const char* ssid = ""; // your network SSID (name of wifi network) const char* password = ""; // your network password const char* host = "script.google.com"; String exec_url = "https://script.google.com/macros/s/AKfycbyHyq0tOPGTXQCFaSkQHkvNpLnNqCXLgzLBgWBhrI3LydWOG4awZltICRC1bzZc3jln/exec"; //ウェブアプリケーションのURL WiFiClientSecure client; String values; //送信するデータ String postValues(String values_to_post) { //M5.Lcd.println("?????"); //delay(4000); if (client.connect(host, 443)){ LcdInit(); M5.Lcd.println("Posting data..."); client.println("POST " + exec_url + " HTTP/1.1"); client.println("HOST: " + (String)host); client.println("Connection: close"); client.println("Content-Type: text/plain"); client.print("Content-Length: "); client.println(values_to_post.length()); client.println(); client.println(values_to_post); delay(100); while (client.available()) { char c = client.read(); M5.Lcd.print(c); } client.stop(); delay(4000); return "post end"; } else { return "ERROR"; } } void connectingWiFi(){ boolean WiFiOn; // WiFi接続したらtrue int n_trial, max_trial = 10; //WiFi接続試行回数とその上限 WiFi.mode(WIFI_STA); WiFi.disconnect(); WiFi.begin(ssid, password); LcdInit(); M5.Lcd.print("Connecting to WiFi"); // attempt to connect to Wifi network: n_trial = 0; while (WiFi.status() != WL_CONNECTED && n_trial < max_trial) { M5.Lcd.print("."); // wait 1 second for re-trying n_trial++; delay(4000); } LcdInit(); if (WiFi.status() == WL_CONNECTED) {WiFiOn = true; M5.Lcd.print("Connected to "); M5.Lcd.println(ssid); M5.Lcd.print("IP: "); M5.Lcd.println(WiFi.localIP()); } else {WiFiOn = false; M5.Lcd.print("WiFi connection failed"); } delay(4000); } void LcdInit(){ M5.Lcd.clear(BLACK); M5.Lcd.setTextSize(2); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.setCursor(0, 0); } void setup() { M5.begin(); LcdInit(); M5.Lcd.print("Send data to Google Spreadsheet\n"); delay(4000); connectingWiFi(); } void loop() { LcdInit(); M5.Lcd.print("MainLoop\n"); values = "FilenameA, SheetnameA, 3,"; //ファイル名、シート名、データ列数、 values += "1, 10, 20, 2, 12, 28, 3, 20, 30"; //以後データ本体 String response = postValues(values); M5.Lcd.print("Response : "); M5.Lcd.println(response); delay(1000); WiFi.disconnect(); while(1); }

Apps Scriptに書いたコード

function doPost(e){ var param = e.postData.getDataAsString();//データ取得 var ary = param.split(',');//取得データをカンマで区切ってaryに格納 var fileName = ary[0];//aryの最初はファイル名(SpreadSheet) var sheetName = ary[1];//次にシート名 var n_of_colms = ary[2];//次に項目数(列数) var folder = DriveApp.getFolderById('14DfoBAvskTqsK_J0Z7DgaXz_l7hnCLDZ');//作業フォルダは固定にする:ここにフォルダIDを記入 var SS_ID = SpreadsheetApp.create(fileName).getId();//ルートにファイル名fileNameで新規スプレッドシート作成 var SS = DriveApp.getFileById(SS_ID);// 新規作成スプレッドシートのIDを取得 var files = folder.getFilesByName(fileName);//作業フォルダ内にfileNameと同じ名前のスプレッドシートが存在するか? if (files.hasNext()) { SS_ID = files.next().getId();//存在する場合はIDをそのファイルに書き換え } else{ folder.addFile(SS);//存在しない場合はルートのファイルをコピー } DriveApp.getRootFolder().removeFile(SS);//ルートに作成したスプレッドシートは不要なので削除 var ary_length = ary.length; var n_of_data = Math.round((ary_length - 3) / n_of_colms); //データの行数(組数) var spreadsheet = SpreadsheetApp.openById(SS_ID);//あらためてSpreadSheetを開く var newSheet = spreadsheet.getSheetByName(sheetName);//同じシート名があるかチェック  if(!newSheet){ newSheet= spreadsheet.insertSheet(sheetName,0);//シートがなければ新規作成 } newSheet.activate(); var columnA_Vals = newSheet.getRange('A:A').getValues(); var LastRow = columnA_Vals.filter(String).length; //空白を除き、入力済の行数を取得 var ary2 = [];//シートに書き込むための配列 for(var i=0;i<n_of_data;i++){ ary2[i] = []; //まず1次元の配列にして for(var j=0;j<n_of_colms;j++){ //その中にさらにデータを格納して2次元にする ary2[i][j]=ary[i*n_of_colms + j + 3];//ary[0]はファイル名、1はシート名、2は列数なので3を足している } } var newRange = newSheet.getRange(LastRow+1,1,n_of_data,n_of_colms);//入力済の次の行から、入力範囲を設定 newRange.setValues(ary2); //ary2の内容を一気に書き込み var graphRange = newSheet.getRange(1,1,LastRow+n_of_data,n_of_colms);//グラフ作成するデータの範囲 var oldCharts = newSheet.getCharts(); //シートにあるすべてのグラフ for (var i in oldCharts) {//グラフの数だけ繰り返す // シートからそのグラフを削除:古いグラフはすべて削除される sheet.removeChart(charts[i]); } var myChart = newSheet.newChart()// 最新のグラフの作成 .addRange(graphRange) .setChartType(Charts.ChartType.SCATTER) .setPosition(1,n_of_colms,50,200) .build(); newSheet.insertChart(myChart); }

実行時のシリアルモニタの内容

16:33:09.993 -> ets Jul 29 2019 12:21:46 16:33:09.993 -> 16:33:09.993 -> rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT) 16:33:09.993 -> configsip: 0, SPIWP:0xee 16:33:09.993 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 16:33:09.993 -> mode:DIO, clock div:1 16:33:09.993 -> load:0x3fff0030,len:1344 16:33:09.993 -> load:0x40078000,len:13864 16:33:09.993 -> load:0x40080400,len:3608 16:33:09.993 -> entry 0x400805f0 16:33:10.364 -> M5Stack initializing... 16:33:11.283 -> OK

M5STACKの画面の内容

Send data to Google Spreadsheet

Connecting to WiFi.

Connected to *************** IP: 192.*******

MainLoop Response : ERROR

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/01/18 07:11

ログの内容を提示しよう
guest

回答1

0

ベストアンサー

https接続はなにかいろいろあったような。だいぶ前にちょっと苦労した記憶があるのですが、あまり真面目に記録をとっていなかったので。

証明書をインストールするとか
https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFiClientSecure/README.md
なんだかよくわからないので'WiFiCleintSecure setCACert 'とかでぐぐってみると実例が拾えたかと思います。

WiFiClientSecure::setInsecure()を事前に呼んでみるとか。安全でなくてもいいから繋がせてよ、というと繋がせてくれるということかしら?
https://garretlab.web.fc2.com/arduino/esp32/examples/WiFiClientSecure/WiFiClientInsecure.html

投稿2023/01/18 22:18

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kikik

2023/01/18 22:53

client.setInsecure(); を加えることでif文を通るようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問