RaspberryPi Pico Wを使ってみた

2025-08-28 raspi raspi-pico python 電子工作

以前チラッと試用しましたが、RaspberryPiにプリインストールされているThonny + MicroPython環境を使うと、めちゃくちゃ簡単にRaspberryPi Picoの開発ができます。

LEDを点滅させる: pico-led.py

from machine import Pin, Timer

led = Pin("LED", Pin.OUT)
timer = Timer()

def blink(timer):
    led.toggle()
    print("toggle!")

timer.init(freq=2, mode=Timer.PERIODIC, callback=blink)

サーボモータを動かす: pico-servo.py

from machine import Pin, PWM
import time

servo = PWM(Pin(0))
servo.freq(50)

max_duty = 65025

for i in range(10):
    servo.duty_u16(int(max_duty*0.0725))
    time.sleep(1)
    servo.duty_u16(int(max_duty*0.12))
    time.sleep(1)

アナログ値を読み取る: pico-adc.py

from machine import ADC
import time

adc = ADC(2)

while True:
    v = adc.read_u16()
    print(v)
    time.sleep(0.2)

これらは、Picoを接続したRaspberryPi上のThonnyで実行ボタンを押すだけで実行が可能です(スクリプトの保存先としてPicoを選ぶことができます)。保存する際にファイル名を main.py とすれば、電源投入後に自動的に実行されるようになります。

ここで調子に乗って、PicoRuby(R2P2)に乗り換えよう!と思って、インストールを試みてみたのですが、ドキュメントの手順ではどうしてもうまく行きませんでした(ターミナルで接続は出来るのですが、PicoRubyのタイトルも出ないしどのコマンドも応答せず)。

uf2も書き込んじゃったし、困ったな…と悩んでいたところ、ThonnyからMicroPythonの再インストールができることが分かり結局元に戻ってきました。やりたいことは大体こっちで出来そうなので、しばらくはPythonのお世話になることにします…。

同一Wifi内のRaspberryPiとTCP通信する例: pico-tcp-client.py

import network, socket, time

SSID = "your-ssid"
PW = "your-password"

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID,PW)

while wlan.isconnected() == False:
    print("connecting to %s.." % (SSID))
    time.sleep(1)

wlan_status = wlan.ifconfig()
print("connected! as %s" % (wlan_status[0]))

addr = socket.getaddrinfo('raspberrypi.local', 2000)[0][-1]
s = socket.socket()
s.connect(addr)
data = s.recv(255)
while len(data) != 0:
    print(data.decode('utf-8').strip())
    data = s.recv(255)
s.close()

(参考)TCPサーバ側: tcp-server.rb (上記のクライアントをテストするためにRaspberryPi側で実行しておきます)

require 'socket'

server = TCPServer.new 2000 # Server bind to port 2000
loop do
  client = server.accept    # Wait for a client to connect
  client.puts "Hello !"
  client.puts "Time is #{Time.now}"
  client.close
end