#はじめに
こんにちは.こちらの記事はESP32からpingコマンドを実行したいけど方法がわからない人向けの記事となっています.この記事を書くきっかけはインターネットで「ESP32 ping 方法」と検索してもそのほとんどがC言語で書かれているか,環境がArduino IDEであったりと自分が望む記事が出てこなかったのが理由です.苦労した末にたどり着いた記事がとても役に立ったので自分と同じような人がいれば役に立つと思いますのでご査収ください.
#この記事に向いている人
- ESP32を用いてpingコマンドを使いたい
- 統合開発環境(IDE)にuPyCraftを使っている
#今回使ったもの (使用環境)
- windows10
- uPyCraft1.1
- ESP32
#実装前
MicroPythonを使用します.IDEはuPyCraftを使用します.どうやって用意するかはこちらの記事で詳しく書かれています(ESP32にmicropythonを入れる方法).また,wifiにつなぐ必要もありますのでこちらの記事に方法が載っています(ESP32をWifiに接続する方法).この二つができて初めてpingに取り掛かる準備ができます.
さて,Pythonでpingコマンドを使うのであればライブラリから「import pings」や「import subprocess」を呼び出してpingコマンドを使うと思うのですがMicroPythonではこれがライブラリとして入ってないです.MicroPythonで使えるライブラリ一覧は下記となります.
御覧の通りPythonよりライブラリの数が少ないですね.そして,pingコマンドを使いたいのにそのライブラリが無いという問題に直面します.無い場合どうするべきか,一番良いのは自分で作ることですが私にはその実力はないので実力のある人の力を借ります.こちらの記事(uPing - Ping library for MicroPython)でMicroPythonで自作のpingモジュールを作りpingコマンドを再現しています.今回はその記事を参考にpingがきちんと通っているのかどうかを確認するプログラムを作りたいと思います.
#pingライブラリを作る
自作pingを作ったShawwwnさんのgitを拝借してpingライブラリを使えるようにします.ちなみに45行目の「h.id = urandom.randomint(0, 65355)」を「h.id = urandom.getrandbits(16)」に変えると正しく動くそうです.
このプログラムをuPyCraftで実行すると下記の結果が得られると思いますこの結果がでれば成功です.MicroPythonでpingのライブラリが疑似的にですが使えるようになりました.
試しにGoogleが無償で提供している「Google Public DNS」のIPアドレス8.8.8.8に向かってやってみます.
成功です.
#簡単な接続判定プログラム
使うことができるようになったpingライブラリでping接続判定をしたいと思います.
import uping
target = "8.8.8.8"
aaa = uping.ping(target, count=1)
if aaa == (1, 1):
print('成功')
else:
print('失敗')
#参考文献