前回のコンピュータ二台でソケット通信を試すの記事で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に対してデータを送信出来る方法がわかったので、次回から温度等のデータを送受信する方法を見ていこう。