Raspberry pi pico W と 秋月電子通商 AE-ESP32-WROOM-32E-MINI の消費電流を比較
電池で駆動でき、MicroPythonで気軽にプログラミングができ、WiFiも使えるマイコンボード Raspberry pi pico W と 秋月電子通商 AE-ESP32-WROOM-32E-MINI の消費電流を比較しました。
単3型のeneloop 3本または4本で、1ヶ月間電池交換無しで動くようにしたいのが目的です。
マイコンボードの使い方としては、間欠動作(何らかの測定、WiFi通信、deepsleep (15分) を繰り返す)により消費電力を節約することを想定しています。そのため、特に deepsleep 時の消費電流を抑えることが重要です。
測定対象のマイコンボード
Raspberry pi pico W
- CPU frequency: 133MHz
- SRAM: 264KB
- Flash ROM: 2MB
- WiFi: 802.11n, 2.4GHz
秋月電子通商 AE-ESP32-WROOM-32E-MINI
- CPU frequency: 240MHz
- SRAM: 520KB
- Flash ROM: 16MB
- WiFi: 802.11b/g/n, 2.4GHz
測定方法
測定回路
![]() |
ANALOG DISCOVERY2 による測定 |
Raspberry pi pico WH
AE-ESP32-WROOM-32E-MINI
プログラム
Raspberry pi pico WH
リファレンス: https://sozorablog.com/raspberry-pi-pico-w-review/
import network
import urequests as requests
from time import sleep
from machine import Pin, deepsleep
# WiFi ssid and password
ssid = '0024A50722AC'
password = '3w4p127sv8rp9'
wlan_status_message = {
network.STAT_IDLE: 'No connection and no activity',
network.STAT_CONNECTING: 'Connecting in progress',
network.STAT_WRONG_PASSWORD: 'Failed due to incorrect password',
network.STAT_NO_AP_FOUND: 'Failed because no access point replied',
# network.STAT_CONNECT_FAIL: 'failed due to other problems',
network.STAT_GOT_IP: 'Connection successful'
}
def get_wlan_status_message(wlan_status):
if wlan_status in wlan_status_message:
return wlan_status_message[wlan_status]
else:
return str(wlan_status)
# Define blinking function for onboard LED to indicate error codes
def blink_led(num_blinks):
led = Pin(16, Pin.OUT)
if num_blinks < 0:
num_blinks = 8 + num_blinks
for i in range(num_blinks):
led.on()
sleep(.2)
led.off()
sleep(.2)
try:
blink_led(2)
# Print the last result
with open('result.txt') as f:
print('last result:', f.read())
# Turn on WiFi
Pin(23, Pin.OUT).high()
sleep(1)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Wait for connect or fail
max_wait = 10
while max_wait > 0 and not wlan.isconnected():
print('wlan: connecting')
sleep(1)
max_wait -= 1
# Handle connection error
wlan_status = wlan.status()
if wlan_status == network.STAT_GOT_IP:
print('wlan: connected')
blink_led(3)
status = wlan.ifconfig()
print('ip = ' + status[0])
else:
blink_led(5)
raise Exception(get_wlan_status_message(wlan_status))
# Send information to the web server
url = 'http://raspi1.home/updatestate.php?mail'
print('request:', url)
res = requests.get(url)
print('response:', res.text)
with open('result.txt', 'w') as f:
f.write(res.text)
res.close()
wlan.disconnect()
wlan.active(False)
except Exception as e:
print('error:', str(e))
with open('result.txt', 'w') as f:
f.write(str(e))
except KeyboardInterrupt:
print('Interrupted!')
# Go to deep sleep
sleep(1)
blink_led(1)
s = Pin(0, Pin.IN, Pin.PULL_UP)
if s.value() == 1: # If GPIO0 is open (not connected to GND), fall in to deep sleep
print('Fall in deep sleep')
Pin(23, Pin.OUT).low() # Turn off the power supply to the wifi
deepsleep(10 * 1000)
else:
print('End')
AE-ESP32-WROOM-32E-MINI
import network
import urequests as requests
from time import sleep
from machine import Pin, deepsleep
# WiFi ssid and password
ssid = '0024A50722AC'
password = '3w4p127sv8rp9'
wlan_status_message = {
network.STAT_IDLE: 'No connection and no activity',
network.STAT_CONNECTING: 'Connecting in progress',
network.STAT_WRONG_PASSWORD: 'Failed due to incorrect password',
network.STAT_NO_AP_FOUND: 'Failed because no access point replied',
# network.STAT_CONNECT_FAIL: 'failed due to other problems',
network.STAT_GOT_IP: 'Connection successful'
}
def get_wlan_status_message(wlan_status):
if wlan_status in wlan_status_message:
return wlan_status_message[wlan_status]
else:
return str(wlan_status)
# Define blinking function for onboard LED to indicate error codes
def blink_led(num_blinks):
led = Pin(15, Pin.OUT)
if num_blinks < 0:
num_blinks = 8 + num_blinks
for i in range(num_blinks):
led.on()
sleep(.2)
led.off()
sleep(.2)
try:
blink_led(2)
# Print the last result
with open('result.txt') as f:
print('last result:', f.read())
sleep(1)
# Turn on WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Wait for connect or fail
max_wait = 10
while max_wait > 0 and not wlan.isconnected():
print('wlan: connecting')
sleep(1)
max_wait -= 1
# Handle connection error
wlan_status = wlan.status()
if wlan_status == network.STAT_GOT_IP:
print('wlan: connected')
blink_led(3)
status = wlan.ifconfig()
print('ip = ' + status[0])
else:
blink_led(5)
raise Exception(get_wlan_status_message(wlan_status))
# Send information to the web server
url = 'http://raspi1.home/updatestate.php?mail'
print('request:', url)
res = requests.get(url)
print('response:', res.text)
with open('result.txt', 'w') as f:
f.write(res.text)
res.close()
wlan.disconnect()
wlan.active(False)
except Exception as e:
print('error:', str(e))
with open('result.txt', 'w') as f:
f.write(str(e))
except KeyboardInterrupt:
print('Interrupted!')
# Go to deep sleep
sleep(1)
blink_led(1)
s = Pin(13, Pin.IN, Pin.PULL_UP)
if s.value() == 1: # If GPIO13 is open (not connected to GND), fall in to deep sleep
print('Fall in deep sleep')
deepsleep(10 * 1000)
else:
print('End')
測定結果
Raspberry pi pico W
WiFi利用時: 約60mA
deepsleep時: 約1.5mA
消費電流は、WiFi利用時は 60mA まで上がりますが、deepsleep中は 約1.5mA でした。計算上は、1900mAh の eneloop で、1900[mAh]÷1.5[mA]=1266[時間]=52[日] 持つことになります。動作時の消費電流を考慮しても、1ヶ月くらいは持ちそうです。
![]() |
Raspberry pi pico W の測定結果: C1(オレンジ)が消費電流[mA]、C2(青)がLED電流 |
AE-ESP32-WROOM-32E-MINI
消費電流は、WiFi利用時は 120mA まで上がり、deepsleep中は 約4.2mA でした。このマイコンボードに搭載されている電圧レギュレータIC AZ1117CH-3.3TRG1 の静消費電流(Quiescent Current) が 4mA のため、ほとんどが電圧レギュレータで消費されているようです。計算上は、1900mAh の eneloop で、1900[mAh]÷1.5[mA]=452[時間]=19[日] ですが、WiFi動作時の消費電流が大きいことや、電圧レギュレータICのドロップ電圧が大きい(1.2V)ことも考慮すると、1週間ぐらいで電池切れになりそうです。このマイコンボードを電池駆動にする際は、消費電力とドロップ電圧の小さい電圧レギュレータを外付けにするのが良さそうです。
コメント
コメントを投稿