GR-CITRUS+WA-MIKANでHTTP GET通信のレスポンスを受信する

GR-CITRUS標準のGET通信ではレスポンスの受信ができないと分かり、
ESPのATコマンドを叩いてどうにかレスポンスを見れないか試行錯誤しました。

# 環境
- GR-CITRUS
- WA-MIKAN-FULL
- microUSBケーブル
- Visual Studio Code 1.30.2

導入の手順は[以前記事を書いた](https://qiita.com/s_fujii/items/f36021ae9e61a171eb00)ので、そちらを参考にしてください。

# Wi-Fiの疎通確認
WA-MIKANにGR-CITRUSを差し込んで、まずWi-Fiの疎通確認をします。

```ruby:main.rb
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 IP

>OK

>Wi-Fi IP Address
+CIFSR:STAIP,"IPアドレス"
+CIFSR:STAMAC,"MACアドレス"
（念のため隠してます）

>OK

>Wi-Fi Connection Closed

>OK


繋がることが確認できました！

# GET通信の概要を見てみる
[GR-CITRUSのメソッド早見表](https://www.renesas.com/jp/ja/products/gadget-renesas/boards/gr-citrus/project-class-method-chart.html)を見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256451/3f41e6a9-7b1b-1ba2-4de1-94b5fbdba58a.png)
HTTPのGET通信は、SDカードを使用する場合のみしか結果が見れないようです。
しかし、どうせならSDカード無しでも結果が見れたらいいなと思い、
実装してみることにしました。

# 実装
WA-MIKANに搭載されているESP8266のATコマンドをWiFi.atで直接叩いてみました。
工夫することで多様なリクエストを送れたりすると思います。

```ruby:main.rb
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を点灯させる……といったことをできるようにしたいと思いました。