
ãããã¯ãŒã¯äžã®ESP32ãèªåæ€çŽ¢ãã ïŒM-SEARCHïŒ
çããããã«ã¡ã¯ãRcatã§ãã
çããESP32ã䜿ã£ãå·¥äœã§wi-fiçµç±ã§éä¿¡ããæã©ãããŠãŸããïŒ
æ®éã«èãããšããã©ãŠã¶ã«IPã¢ãã¬ã¹ãå
¥åããŠéä¿¡ããããœã±ãããªã©ã䜿ã£ãŠããå Žåã®å°çšã®ããã°ã©ã ãšIPã¢ãã¬ã¹ã§ãã¯ãéä¿¡ãããšæããŸãã
ããŠãIPã¢ãã¬ã¹ã©ããã£ãŠååŸããŠãŸããïŒ
倧æµã®ãµã³ãã«ãèŠããšã·ãªã¢ã«ã«ããªã³ããããŠãŸããããšãããæ®éããã§ãã
ããŠãããã§åé¡ã«ãªãã®ãå·¥äœã«çµã¿èŸŒãã åŸããããã§ãããã©ãããšãããšããã§ãã
å¥ã«IPã¢ãã¬ã¹ãåºå®ããŠããŸãã°ãŸãããã§ãããã§ããã©ããããã£ãæäœãããã«ãèªåã§IPã¢ãã¬ã¹ã確èªããªããŠãéä¿¡ããããšãã§ããªããèããŠã¿ãŸããã
æ¬èšäºã¯æ å ±ã¯ãã¹ãŠç¡æã§ã
æŠèŠ
ããŠããã®èšäºã§ã¯å°ãªããšãwi-fiã«æ¥ç¶ããESP32ãšã©ããã£ãŠéä¿¡ããã®ããçè§£ããŠãããŠãã§é²ããŠãããŸãã
å
·äœçã«ã¯ãããã¯ãŒã¯ã«æ¥ç¶ãããæ©åšã«ã¯ãIPã¢ãã¬ã¹ãå²ãåœãŠãããŠããããã®ã¢ãã¬ã¹ã䜿ã£ãŠçžæãç¹å®ããŠéä¿¡ãããšãã£ãå
容ãçè§£ããŠãããšããåæã§ãã
ã§ãçµè«ããèšããšIPã¢ãã¬ã¹ãåãããªããšéä¿¡ã§ããŸãããããã«ããã£ã¹ããšããæ¹æ³ããããŸãã
ããã䜿ã£ãŠç¹å®ã®æ©åšã«åŒã³ãããŠè¿äºãããŠãããä»çµã¿ãããããããM-SEARCHã§ãã
ããã䜿çšããã«ããããããã¯ãŒã¯ãç£èŠããŸããããã©ãããGoogleã®ç»é¢ã«ãã£ã¹ãæ©èœãããã䜿ã£ãŠãã¿ãã?ã§ãã
確ãã«Chromecastãwi-fiã«æ¥ç¶ããã°ãã©ã®æ©åšãããç°¡åã«ç»é¢ããã£ã¹ãã§ããã£ãŠãããèãããã©ããã£ãŠæ€åºããŠãã®ïŒã£ãŠè©±ã§ãããã

ãšããããã§ãã®æ©èœãESP32ã§äœ¿çšããŠèªåæ€åºãããŠã¿ãŸããã
M-SEARCHã£ãŠäœ?
ããŠããŸãã¯M-SEARCHãšã¯äœããã解説ããŠãããŸãããã
äŸãããªãé£è¡æ©ã§å
·åã§æªã人ãåºãæã«ãããããã客æ§ã®äžã«ãå»è
æ§ã¯ããã£ããããŸãããã£ãŠãã€ã§ããã
ãã®æ¹æ³ã¯å¯Ÿè±¡ã®ãããã¯ãŒã¯å
šäœåŒã³ãããè¡ããããã«è©²åœããæ©åšã®ã¿ãå¿çããããšã«ãã£ãŠæãç«ã£ãŠããŸãã
äŸãã°ã以äžã®ãµãŒãã¹ã¯ãããã¯ãŒã¯å
ã®ã«ãŒã¿ãŒãæ€åºããæã«äœ¿ããŸãã
"urn:schemas-upnp-org:service:WANIPConnection:1"
äœãããæã«äœ¿ãããšãããšãèªåã§ããŒããéæŸããæã«äœ¿ããã§ããã
å®éã«ãã±ãããæããŠã¿ãçµæã以äž

HTTP/1.1 200 OK
CACHE-CONTROL: max-age=120
ST: urn:schemas-upnp-org:service:WANIPConnection:1
USN: uuid:e4c797e0-82ce-4f84-b56d-085d9d77c8cd::urn:schemas-upnp-org:service:WANIPConnection:1
EXT:
SERVER: TP-Link/TP-LINK UPnP/1.1 MiniUPnPd/1.8
LOCATION: http://192.168.0.1:1900/rootDesc.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: 1
BOOTID.UPNP.ORG: 1
CONFIGID.UPNP.ORG: 1337ãŸããããªæãã§ã«ãŒã¿ãŒããå¿çã®æååãè¿ã£ãŠããããã§ããã
泚ç®ãã¹ãã¯LOCATIONã®éšåã§ããããURLãæžããŠãããŸãããã
ã€ãŸãããã®éšåã«èªåã®IPã¢ãã¬ã¹ãèŒããããšãã§ããã®ã§ãã
ç®æãã¹ã圢
ããŠãå眮ãããªããªã£ãŠããŸããŸããããæ¬é¡ãžè¡ããŸãããã
æçµçã«ä»¥äžã®ãããªåŒã³ãããšãå¿çãããããšãç®çãšããŸãã
>>> resp = m.Search("urn:Rcat999:service:ESPSearch:1")
>>> print(resp)
HTTP/1.1 200 OK
Location: 192.168.0.136
ST: urn:Rcat999:service:ESPSearch:1ãµãŒãã¹å
ä»å䜿çšãããµãŒãã¹åã«ã¯ä»¥äžã䜿çšããŸããurn:Rcat999:service:ESPSearch-cam:1
urn
ãã³ããŒããšã«ååºæã®å€ãç§ã®èªäœãµãŒãã¹ãªã®ã§ãRcat999ã«ããŸãservice
ãµãŒãã¹åã§ããESP32ãæ¢ãã®ã§ããã£ãœãååã«ããŸãã1
ããŒãžã§ã³çªå·ãããã§ãããšãããã1ã«ããšããããªããŠããããšæããŸãã
å 容
HTTP/1.1 200 OK
ã©ããªå¿çã§ãå¿ ãæåã«ããããããŒãªã®ã§å ¥ããŠãããŸããLocation: ã¢ãã¬ã¹
ãã®èŸºããã¯èªç±ã«æ¹å€ããŠãããŸãã
仿±ããŠããã®ã¯IPã¢ãã¬ã¹ãªã®ã§ãããã ããå ¥ããŸããST
ãããå€åãªããŠãããšã¯æããŸãããäžå¿ãå ¥ããŠãããŸãã
Python(åŒã³ããåŽ)
ããŠããŸãã¯åŒã³ãããæ¹ããäœã£ãŠãããŸãã
ãšãã£ãŠãå®ã¯æ°å¹Žåã«ããŒã¹ã¯ã§ããŠããã®ã§ããããã¡ããã£ãšææ°ã®ç¥èã«åºã¥ããŠä¿®æ£ããã ãã§ãã
æåã«ã«ãŒã¿ãŒã«å¯ŸããŠåŒã³ãããã§ããã®ããå®ã¯ãã§ã«ããããã ã£ããããŸãã
远èš:ãã£ãããªã®ã§ãªãã¡ã¯ã¿ãªã³ã°ããŸãããPythonåŽã¯äžèšã§ææ°çã玹ä»ããŠããŸã
ãšããããã§ä»¥äžããœãŒã¹ã«ãªããŸãã

ãã€ã³ã
éä¿¡å
ã¢ãã¬ã¹ã¯"239.255.255.250"ã§ããŒãã¯1900ã§ããå 容
ããã«M-Searchã®åœ¢åŒã§åŒã³ããçšã®ããŒã¿ãèšè¿°ããŠãããŸãã
ç§ã詳ããããã§ã¯ãªãã®ã§ãå šãŠåããããã§ã¯ãããŸãããããã®åºå®ã¡ãã»ãŒãžã®ãã¡ã倿Žã§ããã®ã¯ãµãŒãã¹åã®éšåã ãã ãšèããŠããŸãã
'M-SEARCH * HTTP/1.1',
f'MX: {Timeout}', #ã¿ã€ã ã¢ãŠã
'HOST: 239.255.255.250:1900',
'MAN: "ssdp:discover"',
f'ST: {ServiceName}' #ãµãŒãã¹åä»åã¯ãã®ãµãŒãã¹åã®éšåãåŒæ°ã«å¿ããŠå€æŽã§ãããããªããã°ã©ã ã«ããŸããã
æ¹è¡
M-Searchã®ã¡ãã»ãŒãžã¯å šãŠcrlfæ¹è¡ã®ããã§ãã
ãã®èŸºééãããšç¹ã«Cèšèªã®åŠçã®æ¹ã§é¢åãªã®ã§æ°ãã€ããŠãã ããã
ãŸããã¡ãã»ãŒãžã®æåŸã¯2é£ç¶ã§æ¹è¡ãå ¥ãããšã«ãªã£ãŠããŸããããŒã¿ã®éä¿¡
åŸã¯èª¿ã¹ããšè²ã åºãŠããŸããããã«ããã£ã¹ãã«å¯ŸããŠå ã»ã©ã®ããããŒããŒã¿ãéä¿¡ããŸãå¿çã®åãåã
äžèšã®ãœãŒã¹ãæé©ãªã®ãã¯ããããŸãããã1ç§åŸ ã£ãŠããããŒã¿ãåä¿¡ããŠããŸãã
ãã®ããã°ã©ã ã§ã¯ãåä¿¡ããããŒã¿ãããã¹ãã«å€æããŠãæ»ãå€ãšããŠè¿ããŠããŸãã
å®éã«äœ¿ã£ãŠã¿ã
ãšãããã䜿ã£ãŠã¿ãŸãããã
ã¢ãžã¥ãŒã«ãã€ã³ããŒãããŠãã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹ããŸãã
äœã£ãM-Searchãªããžã§ã¯ãã®Searchã¡ãŸããã䜿ã£ãŠåŒã³ãããè¡ããŸãã
ãšããããã«ãŒã¿ãŒãåŒãã§ã¿ãŸãã
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import M_search as ms
>>> MS = ms.MSearch_Rcat()
>>> resp = MS.Search("urn:schemas-upnp-org:service:WANIPConnection:1")
>>> print(resp)
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=120
ST: urn:schemas-upnp-org:service:WANIPConnection:1
USN: uuid:e4c797e0-82ce-4f84-b56d-085d9d77c8cd::urn:schemas-upnp-org:service:WANIPConnection:1
EXT:
SERVER: TP-Link/TP-LINK UPnP/1.1 MiniUPnPd/1.8
LOCATION: http://192.168.0.1:1900/rootDesc.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: 1
BOOTID.UPNP.ORG: 1
CONFIGID.UPNP.ORG: 1337ã¡ãããšå¿çãæ¥ãŸããããã¡ãªã¿ã«ãã«ãŒã¿ãŒã®ãµãŒãã¹åã¯çšã«éãããšãããã®ã§ãæ©çš®ã«ãã£ãŠã¯åå¿ããªãã£ããããããã§ãã
ESP32ïŒãµãŒããŒåŽïŒ
ããŠãä»åºŠã¯åŒã³ããããããµãŒããŒã®æ¹ãäœã£ãŠãããŸãã
ãã¡ããæ°å¹Žåã«Pythonã§ã¯å®è£
ããŠããŸããããESP32çšã«å®è£
ããã®ã¯åããŠãšãªããŸãã
ãšããããã§ä»¥äžããœãŒã¹ã«ãªããŸãã

ãã€ã³ã
ãŸãããããããããã«ã¯wi-fiudpã®ã€ã³ã¯ã«ãŒããå¿
èŠã§ã
äžèšã§ã¯å
é ã®ã¿ãã§å®£èšããŠããã®ã§æžããŠãããŸããã
#include <WiFiUdp.h>

æåã«å®è¡ããã®ã¯ãã«ããã£ã¹ããåä¿¡ããããã®åŸ
ã¡åãæºåã§ãã
ãã®é¢æ°ãSetup(Wi-Fiæ¥ç¶åŸ)ã«åŒã³åºããŠãã ããã

次ã«ã«ãŒãã®éšåã§ããããã£ãŠããããšã¯ãããåçŽã§ã
ãšã«ããããããªããã€ã¹ããã®ãã±ãããæµããŠããã®ã§ãã§ããéã軜ãåŠçã§ããããã«ããŠããŸã
ãšããããã§ãè€æ°ã®IFã®é¢éãåŸ
ã¡åããŠããŸãã

ãŸãæåã¯ãå
é ã®7æåãM-Searchãã©ããã
次ã«STãå«ãŸãããã©ãã
å«ãŸããŠããå Žåããã®åŸãã«æ¹è¡ããããã©ãã確èªããŠåãåºã
æåŸã«åãåºãããµãŒãã¹åãèªåã®ãµãŒãã¹åãšåããã©ãã確èª

ããã§èªåãšåãã ã£ãå ŽåãèªåãåŒã°ããŠãããšããŠè¿äºãããŸãã
è¿äºã®æ¹æ³ã¯æåã«å®ããéãã®ãã©ãŒãããã§è¿äºãè¡ããŸãããããŸã§ãäžé£ã®æµããšãªããŸãã

å®éã«äœ¿ã£ãŠã¿ã
ãšããããã§ãã®æ©èœãçµã¿èŸŒãã ãESP32ãwi-fiã«æ¥ç¶ããŠåŒã³åºããŠã¿ãŸããã
åŒã³åºãã«ã¯å
ã»ã©äœæããPythonã䜿ããŸãã

ãã®ããã«å¿çãè¿ã£ãŠããŸããã
ããã§ESP32ã®IPã¢ãã¬ã¹ã¯"192.168.0.30"ã§ããããšãåãããŸãã
ã¡ãªã¿ã«è€æ°å°ãæ¥ç¶ããŠããå Žåã®å¿çã¯ãã®ããã«ãªããŸã

å
šäœã®å¿çã®äžãããIPã¢ãã¬ã¹ã ããæ£èŠè¡šçŸã§æãåºãããããã°ãè€æ°ã®ESP32ã®æ€åºãªãããã§ãããã§ããã
ããããå·¥äœã«å¿ããŠãµãŒãã¹åãå€ãããšããã®ãäžçªç¢ºå®ã§ã¯ãããŸããã
ãŸãšã
ãããã§ãããïŒ
ä»åã®ESP32ã®ããã«å·¥äœã«çµã¿èŸŒãã åŸãããœã³ã³ãšæ¥ç¶ã§ããªãç¶æ
ã§ã®IPã¢ãã¬ã¹ã®ååŸæ¹æ³ã«ã€ããŠèããŠã¿ãŸããã
ãããããåã¯äºåã«ã¢ãã¬ã¹ãåºå®ãããããã£ã¹ãã¬ã€ã«è¡šç€ºããããããŠããŸãããããããããã£ãããšã¯ããªããŠãããããã§ãã
ããã¯ä»åŸã®å·¥äœã®ã¹ã¿ã³ããŒãã«ãªãããã§ãã
é åžæ å ±
ä»åã®æ©èœã¯ä»¥äžã®ãã³ãã¬ãŒãã«æ©èœè¿œå ãã圢ã§å®è£ ããŠããŸã
æ¬æ©èœã®ãœãŒã¹ã³ãŒãã¯ä»¥äžããé
åžãããŠããŸã
ãªããå
¥æã«ã¯å¥éææåºéã®ããŒã¯ãŒãåã³æš©éLv1ãå¿
èŠã§ãã
æš©éã«ã€ããŠã¯å©çšèŠçŽããããŒã¯ãŒãã«ã€ããŠã¯è³Œå
¥ããã ããã°éæŸãããŸãã