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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

639閲覧

javascript内でsubmitさせた後、サーバ内(arduino)にて正常にデータが授受されない。

beansan

総合スコア13

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/08/05 15:55

編集2022/01/12 10:55

クライアントにて処理した内容をサーバへ送り(submit)、サーバー上(arduino)でデータを処理するシステムを作成しています。しかし、データが正常にサーバー上へ授受されません。解決策をご教授いただけると幸いです。

なお、webブラウザ上のコンソール画面では下記エラーが発生し、arduinoのシリアルモニタでは5が出力されていない状況です。

〇ブラウザ上コンソール画面

http://192.168.100.222/?name=M10R*:1 GET http://192.168.100.222/?name=M10R* net::ERR_CONNECTION_REFUSED

〇index.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta name="GENERATOR" content="HomuPage Writer Ver1.20"> <title>西城駅 連動画面</title> <script> function sendmoji(pos){//submitする関数(ここが一番重要かと・・・) pos=encodeURIComponent(pos); console.log(pos); document.FormName.name.value=pos; console.log(document.FormName.name.value); document.FormName.submit(); } function sen(x,y,z,fu,colerflug){ //canvas内に線を描く関数 文字数制限で省略 } function naname_sen(x,y,z,f,fu,colerflug){ //canvas内に斜め線を描く関数 文字数制限で省略 } function sikaku(x,y,z,f){ //canvas内に資格を描く関数 文字数制限で省略 } function moji(text,x,y,size,maxWidth){ //canvas内に文字を描く関数 文字数制限で省略 } function arrive_point(x,y,z,f){ //canvas内に着点(〇)を描く関数 文字数制限で省略 } function signal_kigo(x,y,z,f,colerflug){ //canvas内に信号機を描く関数 文字数制限で省略 function rendo_gamen(sinro){ //連動画面を描画する関数 文字数制限で省略 } function canvas_clear(){ //canvasの描画をリセットする関数 文字数制限で省略 } function dosa_10M(pix){ if(pix.clientX>=400){ if(pix.clientX<=450){ if(pix.clientY>=400){ if(pix.clientY<=450){ if(sinro_setting[0]==1){ confirm( "進路鎖錠中"); return 0; } if(sinro_setting[1]==1){ confirm( "進路鎖錠中"); return 0; } if(M10=='N')var M_name='定位→反位'; if(M10=='R')var M_name='反位→定位'; var result = confirm( "10号を転換します。" + M_name); if(result){ confirm( "転換完了。" ); if(M10=='N'){ var M10flug='R'; sendmoji("M10R*"); } if(M10=='R'){ var M10flug='N'; sendmoji("M10N*"); } M10=M10flug; canvas_clear();//canvasを消去 rendo_gamen(sinro_setting);//再描画 }else{ confirm( "転換はキャンセルされました。" ); } } } } } } function dosa_11M(pix){ if(pix.clientX>=1050){ if(pix.clientX<=1100){ if(pix.clientY>=400){ if(pix.clientY<=450){ if(sinro_setting[2]==1){ confirm( "進路鎖錠中"); return 0; } if(sinro_setting[3]==1){ confirm( "進路鎖錠中"); return 0; } if(M11=='N')var M_name='定位→反位'; if(M11=='R')var M_name='反位→定位'; var result = confirm( "11号を転換します。" + M_name); if(result){ confirm( "転換完了。" ); if(M11=='N')var M11flug='R'; if(M11=='R')var M11flug='N'; M11=M11flug; canvas_clear();//canvasを消去 rendo_gamen(sinro_setting);//再描画 }else{ confirm( "転換はキャンセルされました。" ); } } } } } } var signal_flug=0; function dosa_1RA(pix){ if(pix.clientX>=375){ if(pix.clientX<=425){ if(pix.clientY>=360){ if(pix.clientY<=410){ signal_flug=2; console.log("1R"); console.log(signal_flug); if(sinro_setting[0]==1){ var result = confirm( "1RAを復位します。" ); if(result){ confirm( "復位完了。" ); sinro_setting[0]=0; canvas_clear();//canvasを消去 rendo_gamen(sinro_setting);//再描画 }else{ confirm( "進路復位はキャンセルされました。" ); } } } } } } if(pix.clientX>=800){ if(pix.clientX<=850){ if(pix.clientY>=403){ if(pix.clientY<=453){ signal_flug*=3; console.log("A"); console.log(signal_flug); if(signal_flug==6){ var result = confirm( "1RAを反位設定します。" ); if(result){ confirm( "設定完了。" ); sinro_setting[0]=1; if(M10=='R')var M10flug='N'; if(M10=='N')var M10flug='N'; M10=M10flug; canvas_clear();//canvasを消去 rendo_gamen(sinro_setting);//再描画 }else{ confirm( "進路設定はキャンセルされました。" ); } }else{ signal_flug=0; } } } } } } </script> <style type="text/css"> body{background-color:rgb(0,0,0)} </style> </head> <body> <h2></h2> <canvas id="terminal"width="1900" height="900"></canvas> <br/> <FORM NAME="FormName" ACTION=""> <input type="text" name="name" size="40"> <input type="submit" value="送信"> </form> <script> var M10='N'; var M11='N'; var sinro_setting=[0,0,0,0]; var TR=[0,0,0,0,0,0,0,0]; rendo_gamen(sinro_setting); document.addEventListener('click', dosa); function dosa(pix){ dosa_10M(pix); dosa_11M(pix); dosa_1RA(pix); } TR=[0,0,0,0,0,0,0,0]; rendo_gamen(sinro_setting); </script></body></html>

〇arduino

#include <SPI.h> #include <Ethernet2.h> #include <SD.h> char *FILENAME="index.htm"; byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xBF, 0x98 }; IPAddress ip(192, 168, 100, 222); EthernetServer server(80); int T10=0; int flug=0; int flugdelay=0; char buff[]="0000"; int counter=0; int Mnam=0; void setup() { Serial.begin(9600); while (!Serial) { ; } Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); if (!SD.begin(4)) { Serial.println("ErrorSD!!"); return; } if (!SD.exists(FILENAME)) { Serial.println("ErrorFILE!!"); return; } Serial.println("Ready"); pinMode(31,OUTPUT);//10Mの出力1 pinMode(33,OUTPUT);//10Mの出力2 pinMode(24,OUTPUT); pinMode(22,INPUT);//軌道回路の入力 } void Mhani(int Mname){ //転てつ機を反位転換するプログラム文字数制限で省略 } void Mteii(int Mname){ //転てつ機を定位転換するプログラム文字数制限で省略 } void readHTML( EthernetClient& client){ client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); File file; file = SD.open(FILENAME,FILE_READ); if(file){ while(file.available()){ char buff=file.read(); Serial.print(buff); client.write(buff); } if(T10==0)client.println("<script>TR=[0,0,0,0,0,0,0,0];"); if(T10==1)client.println("<script>TR=[0,0,1,0,0,0,0,0];"); client.println("rendo_gamen(sinro_setting);"); client.println("</script></body></html>"); flugdelay=1; }else{ Serial.println("ErrorFILEREAD!!"); } file.close(); } void loop() { if(digitalRead(22)==HIGH){ digitalWrite(24,HIGH); flug=1; T10=1; }else{ digitalWrite(24,LOW); T10=0; flug=0; } EthernetClient client = server.available(); if (client) { Serial.println("new client"); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) readHTML(client); if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } int chackflug=0; while(1){//クライアントの画面が構成された後に動作(無限ループ) if(flugdelay==0)break; chackflug++; if(chackflug<=10)Serial.println("delaynow..."); int flug1=flug; if(digitalRead(22)==HIGH){ digitalWrite(24,HIGH); flug=1; T10=1; }else{ digitalWrite(24,LOW); flug=0; T10=0; } if(flug1!=flug){ if(T10==0)client.println("<script>TR=[0,0,0,0,0,0,0,0];"); if(T10==1)client.println("<script>TR=[0,0,1,0,0,0,0,0];"); client.println("rendo_gamen(sinro_setting);"); client.println("</script></body></html>"); } while(client.available()>0){//クライアントからデータを受け取ったときに動作(ここが一番重要かと・・・) Serial.println("5"); char data=client.read(); buff[counter]=data; Serial.print(buff[counter]); if(data=='*'){ readHTML(client); counter=0; Mnam=buff[0]-'0'; Mnam*=10; Mnam+=buff[1]-'0'; if(buff[2]=='R')Mhani(Mnam); if(buff[2]=='N')Mteii(Mnam); Serial.println(""); break; }else{ counter++; } } delay(10); } } } delay(1); client.stop(); Serial.println("client disconnected"); } }

〇arduino内シリアルモニタ

Serial.write(c); if (c == '\n' && currentLineIsBlank) readHTML(client); の内容はindex.htmの模写のため省略 delaynow...(×10回)

5は出力されません。
以上よろしくお願いいたします。

〇原因追求
①JavaScript内のfunction sendmoji(pos)関数内のconsole.log(document.FormName.name.value)の出力は「M10R*」であり、ここまで処理は正常です。
②JavaScript内のfunction sendmoji(pos)関数内のdocument.FormName.submit()の処理によりhttp://192.168.100.222/?name=M10R*のURLが生成されていますが、この処理によりarduinoへデータが送られているかどうかは不明です。(確認方法がわかりません。)
③arduino内のwhile(client.available()>0)内以外は正常に動いています。(シリアルモニタで出力させ確認済)
④arduino内のwhile(client.available()>0)にて5が出力されていないところを見ると、while(client.available()>0)ではじかれています。

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

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

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

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

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

guest

回答1

0

プログラムの問題というよりネットワーク環境の問題じゃないの?

原因の切り分けの仕方を考えましょう。

まずサーバーの送信先のURLは
http://192.168.100.222/?name=M10R*

これでいいのですか?
HTTP MethodはGETでいいのですか?

正しい場合、このURLをブラウザに直接入力してください。
JavascriptはこのURLを生成しているだけですので、無視していいです。

net::ERR_CONNECTION_REFUSED

ただ単にネットワークつながってないんじゃないのかって思うのですが
サーバーのフィイアウォール外してみたらどうですか?

投稿2017/08/05 17:51

Tak1016

総合スコア1408

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

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

beansan

2017/08/06 01:13

ご回答ありがとうございます。 サーバーとクライアントは現状ローカル接続なので、ファイアウォールは関係ないかと思います。 PC(クライアント)-SWHAB-arduino(サーバー)の接続となっています。 サーバーへデータを送るプログラムを書くのが初めてなので、一応確認なのですが、 http://192.168.100.222/?name=M10R* これをクライアントから要求することにより 192.168.100.222へM10R*のデータが送られるということで間違いないでしょうか。
Tak1016

2017/08/06 04:44

間違いないかどうかは知らんがな。 そのURLを設計したのはあなたなのだから正しいかどうかはあなたしか判断できないよ。
Tak1016

2017/08/06 05:13 編集

ローカル接続だからファイアウォール関係ないっていうのは間違いだよ。 ローカルネットワークでもポート開放してなかったら接続できないよ。 もし、httpでその基盤を操作するためのI/Fが存在するなら、マニュアルあるはずだから、まずはそのマニュアルを読んで、手動でHTTPリクエストを送信してみるといい。 まず192.168.100.222へpingを打つなどして疎通を確認 そしたら手動でリクエストを送信してみる。 HTTPリクエストってなんなのか HTTP Method (GET POST)ってなんなのか GETの場合、QueryStringってなんなのか POSTの場合Content-Typeは www-form-urlencodedなのか そういう基本的なところがわからないのであればまずはHTTPとはなにかを勉強することをお勧めします。 あとは上にも書いてるけど ネットワークつながってないんだよ。つながってないから192.100.222から応答がないんだよ。まずは疎通確認しろと。 で、素人がやるときはだいたいファイアウォールでハマるから(ポート開放とか説明しても理解できないので)試しにいったんファイアウォール無効にしてみたら?と。 外してみてもつながらないなら別の問題なので。 あなたのローカルIPのセグメントは192.168.100.*であってるのかどうか。 Windowsだったらcmdでipconfigを打ってセグメント確認して。 192.168.11.148 みたいに 3つめの数字が異なっていたら セグメントが違うのでつながらないよ。
Tak1016

2017/08/06 05:16

あと、まずせっかくアドバイスしてるんだから、 「関係ないと思います」とかいう前にアドバイスしたことを試してみましょうよ。 ブラウザにURL直打ちしてみたの?ファイアウォール外してみたの? そんなんだと誰も質問に答えてくれなくなるよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問