GR-CITRUS+WA-MIKANでHTTP GET通信のレスポンスを受信する
GR-CITRUS標準のGET通信ではレスポンスの受信ができないと分かり、
ESPのATコマンドを叩いてどうにかレスポンスを見れないか試行錯誤しました。
環境
- GR-CITRUS
- WA-MIKAN-FULL
- microUSBケーブル
- Visual Studio Code 1.30.2
導入の手順は以前記事を書いたので、そちらを参考にしてください。
Wi-Fiの疎通確認
WA-MIKANにGR-CITRUSを差し込んで、まずWi-Fiの疎通確認をします。
Usb = Serial.new(0,115200)
def log obj
Usb.println obj.to_s
end
SSID = "Wi-FiのSSID"
PASS = "Wi-Fiのパスワード"
System.useWiFi()
log "Wi-Fi Station Mode Setting"
log WiFi.setMode(1)
log "Wi-Fi connecting..."
log WiFi.connect(SSID, PASS)
log "Wi-Fi IP Address"
log WiFi.ipconfig
log "Wi-Fi Connection Closed"
log WiFi.disconnect()
Wi-Fi Station Mode Setting
OK
Wi-Fi connecting...
WIFI CONNECTED
WIFI GOT IPOK
Wi-Fi IP Address
+CIFSR:STAIP,"IPアドレス"
+CIFSR:STAMAC,"MACアドレス"
(念のため隠してます)OK
Wi-Fi Connection Closed
OK
繋がることが確認できました!
GET通信の概要を見てみる
GR-CITRUSのメソッド早見表を見てみます。
HTTPのGET通信は、SDカードを使用する場合のみしか結果が見れないようです。
しかし、どうせならSDカード無しでも結果が見れたらいいなと思い、
実装してみることにしました。
実装
WA-MIKANに搭載されているESP8266のATコマンドをWiFi.atで直接叩いてみました。
工夫することで多様なリクエストを送れたりすると思います。
Usb = Serial.new(0,115200)
def log obj
Usb.print obj.to_s
end
SSID = "Wi-FiのSSID"
PASS = "Wi-Fiのパスワード"
log "Wi-Fi Station Mode Setting"
log WiFi.setMode(1)
log "WiFi connecting..."
log WiFi.connect(SSID,PASS)
log "Wi-Fi IP Address"
log WiFi.ipconfig
log "Wi-Fi multiConnect"
log WiFi.multiConnect(1)
log WiFi.at('AT+CIFSR',1).to_s
host = "34.195.201.244" # httpbin.org/getでレスポンスを確かめる
# ドメイン名だとDNSエラーで弾かれることが多いので、nslookupでIPアドレスを調べるのがおすすめ
url = "/get"
log WiFi.at('AT+CIPMUX=0',1).to_s
log WiFi.at('AT+CIPSTART="TCP","' + host + '",80',1).to_s
#ヘッダー部分作成
s = "GET #{url} HTTP/1.1"
s += "\r\n"
s += "User-Agent: GR-CITRUS"
s += "\r\n"
s += "Host: #{host}"
s += "\r\n"
s += "Content-Type: application/json"
s += "\r\n"
s += "\r\n"
log s
log WiFi.at('AT+CIPSEND='+s.bytesize.to_s,1).to_s
delay(100)
log WiFi.at(s,1).to_s
delay(500)
log "Wi-Fi Connection Closed"
log WiFi.at('AT+CIPCLOSE',1).to_s
Wi-Fi Station Mode Setting
OK
(省略)
Recv 102 bytes
SEND OK
+IPD,354:HTTP/1.1 200 OK
access-control-allow-credentials: true
access-control-allow-origin: *
connection: keep-alive
content-type: application/json
date: Fri, 29 Nov 2019 08:39:53 GMT
referrer-policy: no-referrer-when-downgrade
server: nginx
transfer-encoding: chunked
x-content-encoding-over-network: gzip
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 1; mode=block{
"args": {},
"headers": {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "ja,en-US;q=0.9,en;q=0.8",
"Host": "httpbin.org",
"Referer": "http://httpbin.org/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
},
"origin": "159.28.168.41, 159.28.168.41",
"url": "https://httpbin.org/get"
}
JSON形式のレスポンスがVSCodeのコンソールに返ってきます。
まとめ
Rubyの扱いにまだ慣れていないので、今はコンソールに結果を出すだけですが、
いずれはレスポンスの結果を見てLEDを点灯させる……といったことをできるようにしたいと思いました。
Author And Source
この問題について(GR-CITRUS+WA-MIKANでHTTP GET通信のレスポンスを受信する), 我々は、より多くの情報をここで見つけました https://qiita.com/s_fujii/items/fbe09e659383b679014a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .