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

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

新規登録して質問してみよう
ただいま回答率
85.48%
ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Arduino

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

Q&A

解決済

1回答

2279閲覧

ESP32でlocalドメインの解決ができない。

tmp

総合スコア277

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Arduino

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

0グッド

0クリップ

投稿2020/11/28 15:33

編集2020/11/29 00:34

前提・実現したいこと

ESP32でraspberrypi.localのipアドレスを取得したい。

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

ESP32でraspberrypi.localのipアドレスを取得できません。
localドメインが解決でません、www.yahoo.co.jpなどのipアドレスは取得できます。

もともと、ESP8266の時には、問題なかったのですがESP32に作り替えたときに、
raspberrypiのサーバーにアクセスできなかったので、IPアドレス直書きにすると接続でき処理も動きました。
localドメインが解決できないと仮定して、確認の為の以下のコード作成して
確認するとやはり解決できてないように思えますがなにか間違ってところはないでしょうか?

該当のソースコード

ino

1#include <WiFi.h> 2 3const char ssid[] = "xxxxx"; 4const char pass[] = "xxxxx"; 5 6void setup() 7{ 8 Serial.begin(115200); 9 delay(100); 10 WiFi.mode(WIFI_STA); 11 WiFi.disconnect(); 12 WiFi.begin(ssid,pass); 13 while(WiFi.status() != WL_CONNECTED) { 14 Serial.print("."); 15 delay(100); 16 } 17 Serial.println(" connected. "); 18 19 dnstest("www.yahoo.co.jp"); 20 dnstest("raspberrypi.local"); 21 dnstest("raspberrypi"); 22 dnstest("user-pc.local"); 23} 24void dnstest(char *name) 25{ 26 IPAddress ipaddr; 27 int ret; 28 ret = WiFi.hostByName(name,ipaddr); 29 Serial.printf("hostbyname %s ret=%d %s\n",name,ret,ipaddr.toString().c_str()); 30} 31void loop() 32{ 33 delay(100); 34} 35

実行結果

※(ssidとpassは該当するものに変更後)
.. connected.
hostbyname www.yahoo.co.jp ret=1 183.79.217.124
hostbyname raspberrypi.local ret=0 0.0.0.0
hostbyname raspberrypi ret=0 0.0.0.0
hostbyname user-pc.local ret=0 0.0.0.0

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

arduino-esp32 1.0.4

解決内容

ESP8266と違ってESP32ではESPmDNSを使用すればIPアドレスの問題は解決できました。

ino

1#include <ESPmDNS.h> 2//略  3mdns_init(); //追加 4ipaddr = MDNS.queryHost(name); //.localを省いたもの

raspberrypiなどでIPアドレスが取得できました。

ESP8266では、特にmDNSのライブラリは呼ぶ必要がなかったのでmDNSは、見つけてもらうときに必要で
見つけるときには必要ないと思ってました。
(ESP8266とESP32のライブラリの違いがどこにあるのかまでは、調べてません。)

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

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

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

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

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

y_waiwai

2020/11/28 15:48 編集

そのlocalドメインってのはどうやって解決してるんでしょうか。 たとえば、スマホからとか携帯電話回線からアクセスできるんでしょうか?
tmp

2020/11/28 16:00

ローカルの同じネットワーク内だけ有効なものです。 linuxとかwindows10のあるバージョンから対応の恐らくmDNSというものだと思うのですがWiFi.hostbynameでは解決できないのでしょうか?
guest

回答1

0

ベストアンサー

'ESP32 mDNS'でググるといろいろ出てきますが、そういうのでは解決しなかったということですか?
今試すと、トップでヒットしたのはESP8266用でしたが、2番目にヒットしたESP32でmDNSからIPアドレスを取得したいではESPmDNSライブラリを使ってごにょごにょ、というのが書いてありますが。

投稿2020/11/28 22:21

thkana

総合スコア7639

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

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

tmp

2020/11/29 00:49

2番目の解決方法で解決できました。 但し、MDNS.beginでmDNSを起動するのは、必要のないのに名前を使ってしまうので mdns_initで初期化してipaddr = MDNS.queryHost(name);解決できました。 ESP8266と同じで、mDNSは見つけるときには必要ないと思い込んでいたので検索でみつけることができませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問