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

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

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

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Arduino

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

Q&A

解決済

2回答

2395閲覧

arduinoでwifiのconnectionがつながらない

yosnar

総合スコア8

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Arduino

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

0グッド

0クリップ

投稿2020/06/04 19:46

前提・実現したいこと

arduinoでslackに投稿したいです。
当方はWEB系プログラマーをしていますが、arduinoに関しては初めて触るため、知見がありません。
基本的なところから分っていないと思いますので、確認方法なんかも教えていただけると嬉しいです。

  • arduino自体はwifi付きの互換機を使用しています。

https://www.amazon.co.jp/gp/product/B07H7F4KW3/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

  • arduino側は、wifiのスポットをスキャンするプログラムの動作確認ができてるので、本体と、wifiのチップには問題ないと認識しています。
  • slackはワークスペースにアプリを作成済みで、vscodeのrest crientから投稿は出来ています。
POST /services/xxxxxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxxxx Content-type: application/json Host: hooks.slack.com:443 { "text": "xxx" }

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

以下のコードの箇所で正常とならず、connection failedと扱われます。

client.connect(kSlackHost, kHttpsPort)

log

1setup start=== 2WiFi_setup start === 3connecting... 4connecting... 5connecting... 6connecting... 7connecting... 8connecting... 9connecting... 10192.168.32.129 111 120 13WiFi_setup end === 14setup ------ 15slack_send start === 16slack connection failed 17ssl cert mismatch 18 19kSlackHost:hooks.slack.com 20kSlackUrl:/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxx 21payload:payload={"text": "test from ESP8266", "icon_emoji": ":ghost:"} 22 23slack_send end === 24setup end===

該当のソースコード

C++

1#include <ESP8266WiFi.h> 2#include <ESP8266Ping.h> 3#include <WiFiClientSecure.h> 4 5static const char* kSlackUrl = "/services/xxxxxxxxx/xxxxxxxxx/xxxxxxxxxxxxxxxx"; 6static const char* kSlackUsername = "arduino_bot"; 7static const char* kSsid = "xxxxxx"; // WifiのSSID 8static const char* kPass = "xxxxxx"; // Wifiのパスワード 9static const char* kSlackHost = "hooks.slack.com"; 10static const int kHttpsPort = 443; 11 12void WiFi_setup() 13{ 14 Serial.println("WiFi_setup start ==="); 15 WiFi.begin(kSsid, kPass); 16 while ( WiFi.status() != WL_CONNECTED) { 17 Serial.println("connecting..."); 18 delay(500); // msec 19 } 20 Serial.println(WiFi.localIP()); 21 Serial.println(Ping.ping("www.google.com")); 22 Serial.println(Ping.ping(kSlackHost)); 23 24 Serial.println("WiFi_setup end ==="); 25} 26 27void slack_send() 28{ 29 Serial.println("slack_send start ==="); 30 WiFiClientSecure client; 31 32 // connect 33 if (!client.connect(kSlackHost, kHttpsPort)) { 34 Serial.println("slack connection failed"); 35 } else { 36 Serial.println("slack connection: OK"); 37 } 38 39 // SSL Certificate finngerprint for the host 40 const char* fingerprint = "xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx"; 41 42 // verify the signature of the ssl certificate 43 if (client.verify(fingerprint, kSlackHost)) { 44 Serial.println("ssl cert matches"); 45 } else { 46 Serial.println("ssl cert mismatch"); 47 } 48 49 // submit 50 String message = "test from ESP8266"; 51 String payload = "payload={\"text\": \"" + message + "\", \"icon_emoji\": \":ghost:\"}"; 52 Serial.println(); 53 Serial.println(String("kSlackHost:") + kSlackHost); 54 Serial.println(String("kSlackUrl:") + kSlackUrl); 55 Serial.println(String("payload:") + payload.c_str()); 56 Serial.println(); 57 client.print("POST "); 58 client.print(kSlackUrl); 59 client.println(" HTTP/1.1"); 60 client.print("Host: "); 61 client.println(kSlackHost); 62 client.println("User-Agent: ArduinoIoT/1.0"); 63 client.println("Connection: close"); 64 client.println("Content-Type: application/x-www-form-urlencoded;"); 65 client.print("Content-Length: "); 66 client.println(payload.length()); 67 client.println(); 68 client.println(payload); 69 70 delay(7000); 71 72 while (client.available()) { 73 String line = client.readStringUntil('\r'); 74 Serial.println(line); 75 } 76 client.stop(); 77 Serial.println("slack_send end ==="); 78} 79 80void setup() { 81 Serial.begin(9600); 82 Serial.println("setup start==="); 83 WiFi_setup(); 84 Serial.println("setup ------"); 85 slack_send(); 86 Serial.println("setup end==="); 87} 88 89void loop() { 90 // put your main code here, to run repeatedly: 91}

試したこと

原因として疑ったのは

  1. fingerprintが正しくない

→PCのchromeのdev toolにあるslack.comの証明書から指紋SHA-1を取得して使っていて、問題ない認識です

  1. インターネットに接続できていない

→ 接続後にwww.google.comへpingを送って通っているように見えますので問題ない認識です。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答2

0

自己解決

思考錯誤したのですが、結局、今のソースではうまく行かず、別のソースを探してみたところ、Arduinoアプリのスケッチ例に、今のチップに合うサンプルソースがたくさん入ってました。
そこではclientに使うライブラリがWiFiClientSecureではなく、ESP8266HTTPClientを使用していて、そちらに変えたらすんなり動きました。
前のソースで間違えていた部分があったのかどうかは確認出来てませんが、WiFiClientSecureはそのサンプル例にはありませんでしたので、もしかしたら、モジュールに合わないライブラリを利用してしまっていたのかもしれないです。

なにか作るときはモジュールに合うサンプル例から探すという基本的かもしれませんが学びを得られました。

投稿2020/06/05 20:32

yosnar

総合スコア8

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

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

0

client.connect(kSlackHost, kHttpsPort)

でエラーになるなら、
kSlackHost, kHttpsPort が間違ってるということです

投稿2020/06/04 23:04

y_waiwai

総合スコア87784

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

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

yosnar

2020/06/05 20:30

ご回答ありがとうございます。 思考錯誤してみたのですが、現在のソースではうまく行かず、対処法の特定も出来ませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問