
前回のコンピュータ二台でソケット通信を試すの記事でRaspberry Piをサーバ側、Ubuntuをクライアント側にしてソケット通信を試した。
目標のマイコンで温度等のアナログ値を取得して、遠方のRaspberry Piにデータを送信するという事に近づく為に、今回はESP8266のモジュールをクライアント側にしてソケット通信を試す。
Raspberry Piのsrv.pyのコードは前回と同じにして、端末を開いてsrv.pyを実行しておく。

UbuntuにESP8266のNodeMCUをUSBで繋いで、thonnyを開き、main.pyを下記のようにする。
main.py
import network
SSID = '{使用中のWiFiのSSID}'
pw = '{上記SSIDに対応した暗号キー}'
IP = "192.168.0.27" # サーバ側のIPアドレス
PORT = "12345" # サーバ側のポート
def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect(SSID, pw)
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())
def send_socket(addr, port):
    import socket
    sock = socket.socket()
    sock.connect((addr, port))
    mes = "send socket from esp8266"
    sock.send(mes.encode())
    while True:
        data = sock.recv(1024)
        if data:
            print(data.decode())
        else:
            break
    sock.close()
do_connect()
send_socket(IP_ADDRESS, PORT)
thonnyのエディタ上でコードを実行する場合は、do_connect()は必要ないが、NodeMCUに直接電力を共給した場合はWiFiに接続するための手続きが必要になる。
thonnyでコードを実行する際は、開発機のWiFiの接続状況を共有しつつ、ローカルネットワークでは違うデバイスとして認識されるようだ。
開発機からNodeMCUを外して、USBケーブル経由で直接電力を供給してみたところ、Raspberry Piの方の端末で下記のように出力された。
$ python3 srv.py
Waiting for connection.
Client connected ('192.168.0.20', 3173)
Received:send socket from esp8266
ESP8266モジュールがどのようにWiFiを利用するのか?が少しずつ見えてきた。
ローカルネットワーク間ではあるが、マイコンからPCに対してデータを送信出来る方法がわかったので、次回から温度等のデータを送受信する方法を見ていこう。





