Slide 13
Slide 13 text
© ZOZO, Inc. 13
詳細な処理内容をみてみる
# ライブラリ読み込み
require 'picorubyvm'
require 'machine'
require 'adc'
require 'json'
require 'net/ntp'
require 'net/mqtt'
# 定数定義
AWS_ENDPOINT = "xxxxx-ats.iot.ap-northeast-1.amazonaws.com"
DEVICE_ID = Machine.unique_id[0, 8]
adc = ADC.new(34)
# WiFi 接続待ち
sleep 0.5 until ESP32::WiFi.link_connected?
# NTP 時刻同期
ntp_base = Net::NTP.get
boot_uptime_us = Machine.uptime_us
# MQTT 接続(AWS IoT Core)
client = Net::MQTT::Client.new(
AWS_ENDPOINT, 8883,
client_id: "r2p2-#{DEVICE_ID}",
ssl: true,
ca_file: "/etc/aws/AmazonRootCA1.pem",
cert_file: "/etc/aws/device-cert.pem",
key_file: "/etc/aws/device-private.key"
)
client.connect
# メインループ:1 秒ごとに光センサー値を publish
while true
ts = ntp_base + (Machine.uptime_us - boot_uptime_us) /
1_000_000
light = adc.read
client.publish("r2p2/#{DEVICE_ID}/sensor/light",
JSON.generate({device_id: DEVICE_ID, ts: ts, light_value:
light}))
sleep 1
end
① ライブラリ読み込み
② WiFi 接続
③ NTPを使用した時刻同期
④ MQTT 接続
⑤ ループ
(1秒毎にセンサ情報をPublish)
以下がわかりづらい
● どの処理にどれぐらい
メモリを使用しているのか
● どこを意識して節約すれば良いか
メモリの割り当て状況を確認できる関数 mrbc_alloc_statistics() を使用し、可視化
app.rb