1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2つのESP32を使い,同期処理をする方法について

Last updated at Posted at 2024-11-20

今回は,2つのESP32を使い,同期処理をする方法について説明します.

モチベーション

この題材にした理由は2つのESP32を使い,同期処理をすれば1台にかかる負担が減り,プログラムがスムーズにいくのでは?というところからやってみました.

1台目のESP32

1台目のESP32は先に処理したいメインのプログラムになります.今回は同期処理させたい部分をtime.sleep(10)という風にしました.

同期タイミングはsync_pin.value(1)でGPIO4の信号をHIGHに設定したら同期します.同期終了タイミングとして, sync_pin.value(0)でGPIO4の信号をLOWにします.

output.py
from machine import Pin
import time

# GPIO4を出力用に設定
sync_pin = Pin(4, Pin.OUT)

def main():
    print("プログラム開始")
    
    # 同期信号をHIGHに設定
    sync_pin.value(1)
    print("GPIO4をHIGHに設定")
    
    # 10秒間スリープするというプログラムを同期処理のメインの処理
    time.sleep(10)
    
    # プログラム終了時に同期信号をLOWに設定
    sync_pin.value(0)
    print("GPIO4をLOWに設定")
    print("プログラム終了")

if __name__ == "__main__":
    main()

2台目のESP32

2台目のESP32は1台目のESP32のある部分のプログラムと同期処理させたいプログラムです.1台目のESP32のtime.sleep(10)と同期して,その時間を計測しています.同期タイミングは1台目のESP32のsync_pin.value(1)の信号を受け取ったら同期を始め,sync_pin.value(0)の信号を受け取ったら同期終了です.

input.py
from machine import Pin
import time

# GPIO5を入力用に設定(プルダウン抵抗を有効化)
sync_pin = Pin(5, Pin.IN, Pin.PULL_DOWN)

def main():
    print("待機中...")
    
    # 初期化時に強制的にLOW状態を待つ
    print("LOW状態になるまで待機...")
    while sync_pin.value() == 1:
        time.sleep_ms(100)
        print(f"現在のピン状態: {sync_pin.value()}")
    
    print("LOW状態を検出、HIGH待機開始")
    
    # HIGH信号を待つ
    while sync_pin.value() == 0:
        time.sleep_ms(10)
    
    print("同期信号を検出: 測定を開始")
    start_time = time.ticks_ms()
    
    # LOW信号になるまで待つ
    while sync_pin.value() == 1:
        time.sleep_ms(10)
    
    end_time = time.ticks_ms()
    print(f"測定完了: 実行時間 = {time.ticks_diff(end_time, start_time)} ミリ秒")

if __name__ == "__main__":
    main()

実行手順

始めに2台目のESP32のファイル(input.py)を動かします.

image.png

次に1台目のESP32のファイル(output.py)を動かします.

image.png

この時,1台目のESP32は2台目のESP32に信号をGPIO 4から送り,2台目のESP32は以下のようになります.

image.png

そうすると以下の実行結果のようになります.

実行結果

1台目のESP32の結果です.

image.png

2台目のESP32の結果です.

image.png

考察

同期処理の結果は9997ミリで10秒(10000ミリ秒)ではありませんでした.これは1台目のESP32の信号を送受信した時間の差ではないかと考えています.

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?