ESP32에서 Micropython으로 HTTP 요청 (POST)으로 데이터를 전송하고 PHP (서버)로 수신

환경



마이크로컨트롤러: ESP32
펌웨어: Micropython1.3

서버: Ubuntu18.04
웹 서버: Apache2
PHP: PHP7.4

※ ESP32에 Micropython이 들어 있지 않으면 실행할 수 없으므로주의하시기 바랍니다.
※ 만약 Micropython을 넣는 방법을 알고 싶은 사람이 있으면 여기를 참조하십시오. >>> ESP32에 micropython을 넣는 방법 (uPyCraft 사용)

하고 싶은 일





예를 들어 ESP32에서 센서 데이터를 얻은 후 데이터를 서버로 보내고 싶습니다! 토카

이번에는 위 그림과 같이 ESP32에서 펌웨어 Micropython으로 서버 인 Ubuntu18.04 (Apache2)에 HTTP POST로 데이터를 전송합니다.

ESP32



Micropython에는 HTTP 요청을위한 모듈이 있습니다.
그것이 urequests라는 모듈입니다.

또한 이번에는 데이터를 JSON 형식으로 전송하기 때문에 ujson 모듈도 사용합니다.

※또한 urequest와 ujson은 Python의 모듈인 requests와 json과 사용법은 거의 같습니다.

이하 소스 코드가 됩니다.
import urequests
import ujson

#送信先のURLの指定
url = 'http://xxx.xxx.xxx.xxx/test.php'

#データをDICT型で宣言
powerdata = {
             "value" : "23.4",
             "text" : "Hello World!"
             }

#jsonデータで送信するという事を明示的に宣言
header = {
        'Content-Type' : 'application/json'
         }

#HTTPリクエストをPOSTとして送信
res = urequests.post(
    url,
    data = ujson.dumps(powerdata).encode("utf-8"),
    headers = header
)

#サーバ側からのレスポンスを受け取って表示(jsonのデコードも一緒にしている)
print (res.json())

#終了
res.close()

코드의 의미는 코멘트 아웃으로 쓰여 있으므로 그쪽을 참조하십시오.

서버



수신측의 프로그램은 PHP를 사용해 써 갑니다.

미리 웹 서버 인 Apache2를 시작하십시오.

만약 PHP의 인스톨이 끝나지 않은 분은 하기 커멘드로 인스톨을 부탁합니다.
sudo apt install php7.4 libapache2-mod-php7.4
$ sudo systemctl start apache2
$ systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2020-12-09 08:01:07 UTC; 1 day 21h ago
  Process: 8442 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
 Main PID: 1049 (apache2)
    Tasks: 7 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─1049 /usr/sbin/apache2 -k start
           ├─4001 /usr/sbin/apache2 -k start
           ├─8446 /usr/sbin/apache2 -k start
           ├─8447 /usr/sbin/apache2 -k start
           ├─8448 /usr/sbin/apache2 -k start
           ├─8449 /usr/sbin/apache2 -k start
           └─8450 /usr/sbin/apache2 -k start

다음으로 PHP 파일을 작성합니다.
Apache2는/var/www/html/하위에 파일을 넣습니다.

test.php
<?php
//送られてきたPOSTデータを受け取って,JSONデータをデコードして$inに入れる.
$in = json_decode(stripslashes(file_get_contents('php://input')),true);

//送られてきたデータを取り出す
$value = $in["value"]; // = 23.4
$text = $in["text"];   // = Hello World!

//レスポンスを「Completed!」とし,それをJSONとして再度エンコード
//そして送信元(ESP32)へ返す.
echo json_encode("Completed!");
?>

코드의 의미는 마찬가지로 코멘트 아웃을 참조하십시오.

실행



ESP32에서 실행합니다.
>>> execfile("test.py")
["Completed!"]

실행을하고 Completed!라는 문자열이 돌아 오면 성공입니다.



이번에는 HTTP POST를 사용하여 ESP32에서 서버로 데이터를 보냈습니다.
이를 적용하면 수신 한 데이터를 데이터베이스에 저장할 수 있습니다.
시간이 있으면 그 기사도 쓸 생각입니다.

좋은 웹페이지 즐겨찾기