« micro:bit Arduino/MBED開発ツール(v2)(micro:bit-v2対応,linux版) | トップページ | ubuntu_Live_USBの作成方法 »

2021年1月 3日 (日)

MicroPython(F767ZI) Network Samples

2021/1/3
初版

MicroPython(F767ZI ) Network Samples

MicroPython(F767ZI ) Network Samples

概要

MicroPython(F767ZI) Network Samples

この記事は「 MicroPython(F767ZI)でStartwars(AsciiArt)を動かす 」の続編にあたり、NetworkアクセスSamplesを記述している。ネットワークの接続が完了すれば、それ以降はESP8266のmicropythonとほぼ同じようだ。
(ホストはubuntuを想定している)

sample1

http_get.py

# ネットワークを有効化する import network nic = network.LAN() nic.active(1) # 以下はESP8266のサンプルと全く同じ def http_get(url): import socket _, _, host, path = url.split('/', 3) addr = socket.getaddrinfo(host, 80)[0][-1] s = socket.socket() s.connect(addr) s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8')) while True: data = s.recv(100) if data: print(str(data, 'utf8'), end='') else: break s.close() print(http_get('http://micropython.org/ks/test.html'))

REPL実行例:

paste mode; Ctrl-C to cancel, Ctrl-D to finish === import network === nic = network.LAN() === nic.active(1) === === >>> nic.ifconfig() ('192.168.0.18', '255.255.255.0', '192.168.0.4', '192.168.0.4') >>> paste mode; Ctrl-C to cancel, Ctrl-D to finish === === def http_get(url): === import socket === _, _, host, path = url.split('/', 3) === addr = socket.getaddrinfo(host, 80)[0][-1] === s = socket.socket() === s.connect(addr) === s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8')) === while True: === data = s.recv(100) === if data: === print(str(data, 'utf8'), end='') === else: === break === s.close() === === print(http_get('http://micropython.org/ks/test.html')) === ===

REPL出力結果:

HTTP/1.1 200 OK Server: nginx/1.10.3 Date: Sun, 03 Jan 2021 09:54:59 GMT Content-Type: text/html Content-Length: 180 Last-Modified: Tue, 03 Dec 2013 00:16:26 GMT Connection: close Vary: Accept-Encoding ETag: "529d22da-b4" Accept-Ranges: bytes <!DOCTYPE html> <html lang="en"> <head> <title>Test</title> </head> <body> <h1>Test</h1> It's working if you can read this! </body> </html> None

sample2

目的のプログラム実行前に
以下を実行して ネットワークの有効化と
IPアドレスの確認を行なう。

import network nic = network.LAN() nic.active(1) nic.ifconfig()

httpserver.py

# 以下はESP8266のサンプルを差分のあるmachine関係をコメントアウトしたもの #import machine #pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)] html = """<!DOCTYPE html> <html> <head> <title>ESP8266 Pins</title> </head> <body> <h1>ESP8266 Pins</h1> <table border="1"> <tr><th>Pin</th><th>Value</th></tr> %s </table> </body> </html> """ import socket addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(1) print('listening on', addr) while True: cl, addr = s.accept() print('client connected from', addr) cl_file = cl.makefile('rwb', 0) while True: line = cl_file.readline() if not line or line == b'\r\n': break #rows = ['<tr><td>%s</td><td>%d</td></tr>' % (str(p), p.value()) for p in pins] rows = ['<tr><td>ABC</td><td>123</td></tr>'] response = html % '\n'.join(rows) cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') cl.send(response) cl.close()

REPL実行例:

>>> nic.active() True >>> nic.ifconfig() ('192.168.0.18', '255.255.255.0', '192.168.0.4', '192.168.0.4') >>> # 上の192.168.0.18がサーバーアドレスになるので覚えておいてサーバー起動後、このIPアドレスにアクセスする paste mode; Ctrl-C to cancel, Ctrl-D to finish === #import machine === #pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)] === === html = """<!DOCTYPE html> === <html> === <head> <title>ESP8266 Pins</title> </head> === <body> <h1>ESP8266 Pins</h1> === <table border="1"> <tr><th>Pin</th><th>Value</th></tr> %s </table> === </body> === </html> === """ === === import socket === addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] === === s = socket.socket() === s.bind(addr) === s.listen(1) === === print('listening on', addr) === === while True: === cl, addr = s.accept() === print('client connected from', addr) === cl_file = cl.makefile('rwb', 0) === while True: === line = cl_file.readline() === if not line or line == b'\r\n': === break === === #rows = ['<tr><td>%s</td><td>%d</td></tr>' % (str(p), p.value()) for p in pins] === rows = ['<tr><td>ABC</td><td>123</td></tr>'] === response = html % '\n'.join(rows) === cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') === cl.send(response) === cl.close() === ===

上でサーバーを起動したら 確認したIPアドレス(192.128.0.xxx:80)で ブラウザー・アクセスする。

REPL出力例:

listening on ('0.0.0.0', 80) client connected from ('192.168.0.2', 56016) 44 229 client connected from ('192.168.0.2', 56018) 44 229

ウェブ画面表示例:

ESP8266 Pins

Pin Value
ABC 123

参考情報

https://docs.micropython.org/en/latest/esp8266/tutorial/network_basics.html
https://docs.micropython.org/en/latest/esp8266/tutorial/network_tcp.html

M5Stack MicroPython API調査記録 ネットワーク編
ESP32/ESP8266のMicroPythonでMQTTを使ってみた
ESP32のMicroPythonでOSC(Open Sound Control)で通信する

以上

|

« micro:bit Arduino/MBED開発ツール(v2)(micro:bit-v2対応,linux版) | トップページ | ubuntu_Live_USBの作成方法 »

MicroPython」カテゴリの記事

Nucleo」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« micro:bit Arduino/MBED開発ツール(v2)(micro:bit-v2対応,linux版) | トップページ | ubuntu_Live_USBの作成方法 »