投稿日:2025年8月18日
前回の記事 でPicoシリーズはデータベースに接続するためのPyMySQLが使えないと書きました。
MicroPython環境では外部ライブラリが制限されており、PyMySQLを使えないのが制約です。
そこで Pico W → HTTP → PHP → MySQL の構成で、Web系開発者になじみのある仕組みでデータベース連携に挑戦しました。
動作は以下になります。

▲MicroPythonで書いたプログラムを実行、ブラウザーに表示します。
update flgボタンクリックでflgを2に更新するプログラムになります。

▲実行後アラート表示します。

▲flgが更新されました。
以下が各ソースコードになります。
MicroPython
import time
import network
import socket
# Wi-Fi 接続情報
ssid = 'Wireless Network'
password = 'The Password''
# Wi-Fi 接続
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# HTML
html = """<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script
src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
crossorigin="anonymous"></script>
<style>
h1 {
text-align: center;
margin: 0;
}
#updateFlgBtn {
background-color: red;
padding: 0.25rem 1rem;
margin: 0 auto;
text-align: center;
color: #fff;
width: fit-content;
border-radius: 5px;
cursor: pointer;
transition: 0.3s;
}
#updateFlgBtn:hover {
opacity: 0.7;
}
</style>
</head>
<body>
<h1>Pico WでMySQL変更</h1>
<p id="updateFlgBtn">update flg</p>
<script>
$("#updateFlgBtn").click(function () {
// ▼ PCのphpに接続。※Localhostではないので注意。
$.get("http://192.168.10.10:8888/update.php?flg=2");
alert("flgを2に更新しました。");
});
</script>
</body>
</html>
"""
# Wi-Fi 接続待ち
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('Connected')
status = wlan.ifconfig()
print('IP =', status[0])
# ソケットオープン
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
print('listening on', addr)
# クライアント接続待機
while True:
try:
cl, addr = s.accept()
print('client connected from', addr)
request = cl.recv(1024)
print("request:", request)
# HTMLレスポンス作成
full_response = 'HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n' + html
cl.send(full_response)
cl.close()
except OSError as e:
cl.close()
print('connection closed')
▲15〜58行目が表示するhtmlになります。
特筆すべきは52行目、
$.get("http://192.168.10.10:8888/update.php?flg=2");
▲LocalhostのアドレスではなくPCのアドレスになります。
ファイルupdate.phpに、更新内容をflg=2パラメータとして付与します。
▼Macでは、システム設定 > ネットワーク > Wi-Fi とたどり、Wi-Fi詳細のIPアドレスに記載されているものになります。

update.php
<?php
// GETパラメータを受け取る
$flg = isset($_GET['flg']) ? intval($_GET['flg']) : 0;
try {
// DB接続 (MAMP の場合)
$pdo = new PDO("mysql:host=127.0.0.1;port=8889;dbname=testdb;charset=utf8", "root", "root");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// UPDATE実行
$stmt = $pdo->prepare("UPDATE test_table SET flg = ? WHERE id = 1");
$stmt->execute([$flg]);
echo "OK: flg updated to $flg";
} catch (PDOException $e) {
echo "DB Error: " . $e->getMessage();
}
▲3行目でパラメータを受け取ります。
7行目、PDOでデータベースに接続します。
11行目、SQL文。今回はidが1のものを更新しますが、任意のidを指定して変更するのが本来の使い方になります。
データベース

▲phpMyAdminにデータベースを用意します。
testdbというデータベースに、test_tableというテーブルを作り、idとflgフォールドを作りました。
今回のプログラムはid 1のflgを2に変更します。
Pico Wとデータベースの連携、半ば諦めかけてましたが何とかできました。
以降はPico Wに入力デバイスを接続してテキスト入力など検証してみます。
最終的にはQRコードリーダーを接続し、開発しているLaravelでのQRコード受け付けシステムに取り入れたいと思います。
考えてみましたが、ブラウザ閲覧に向いてないZero 2 Wですが、この方法だと同じようにできるのではないかと思いました。
Zero 2 WではPyMySQLも使えるので重宝するのではないかと思います。
引き続き検証したいと思います。
最後まで読んでいただき、ありがとうございました。