Lチカをやってみる
JetsonはRaspberry Pi と同じGPIOがあります。
そこでお馴染みのLチカ(LEDをチカチカと点滅させる)をやってみます。
ネットでは下記のようなサンプルプログラムがあります。
    while True:
        # LED消灯
        GPIO.output(led_0, 0)
        # 1秒間スリープする
        time.sleep(1.0)
        # LED点灯
        GPIO.output(led_0,1)
        # 1秒間スリープする
        time.sleep(1.0)

Lチカは実現しています。しかし、このプログラムは配線のチェック用くらいの用途で拡張性がありません。
理由はtime.sleep(1.0)で1秒間時計を見ているだけでその間何もできません。例えばスイッチを押したら Lチカ終了とする。こんな機能を追加したいときスイッチを押しても最長1秒間スイッチの検出ができません。

次にちゃんと発展性のあるコードを示します。
ボタンを押したときだけLチカをします。(押していないときは消灯)
上のコードと決定的に違うのはタイマー割り込みを使って処理をします。

回路図です。

ブレッドボード図です。

コードです。
import RPi.GPIO as GPIO
import time
import threading
from logging import NullHandler

g_ledOn  = False
g_tm = NullHandler
g_streamstop= False


# Pin Definitions
led_pin = 12  # BCM pin 18, BOARD pin 18
btn_pin = 18  # Board pin 21

def tm_callback():
    global g_tm, g_ledOn
    g_tm.cancel()
    del g_tm
    g_tm = NullHandler
    
    # print( time.time() )
    if g_streamstop == False:
        g_ledOn ^= 1
        g_tm = threading.Timer( 0.5 , tm_callback )
        g_tm.start()


def main():
    global g_tm, g_streamstop
    g_tm = threading.Timer( 0.1 , tm_callback )
    g_tm.start()

    GPIO.setmode(GPIO.BCM)  # BCM pin-numbering scheme from Raspberry Pi
    # set pin as an output pin with optional initial state of HIGH
    GPIO.setup(led_pin, GPIO.OUT, initial=GPIO.LOW)
    GPIO.setup(btn_pin, GPIO.IN)  # button pin set as input

    while True:
        try:
            pass
        except KeyboardInterrupt:
            g_streamstop = True
            g_tm.cancel()
            g_tm = NullHandler
            break
        inp = GPIO.input(btn_pin)
        if inp == 1:
            GPIO.output(led_pin, 0)
        else:
            GPIO.output(led_pin, g_ledOn)

            
    GPIO.cleanup()

if __name__ == '__main__':

    main()

関数mainでタイマー割込みのセットをします。

    g_tm = threading.Timer( 0.1 , tm_callback )
    g_tm.start()
    
threading.Timer( タイマー割込みが発生するまでの時間 , タイマー割込みのコールバック関数 ); になります。関数tm_callbackは0.1秒後に呼び出されます。
関数tm_callbackの処理内容です。
このタイマー割り込みはいわゆるワンショット(1回だけ発生する)なので何回も使う場合は割り込み関数ないでタイマーの再セットをします。

    global g_tm, g_ledOn
    //ハンドラーをキャンセルする
    g_tm.cancel()
    //ハンドラーの解放
    del g_tm
    ハンドラーをNullにする
    g_tm = NullHandler
    
    # print( time.time() )
    if g_streamstop == False:
        //LEDの点灯・消灯データを反転
        g_ledOn ^= 1
        //再度タイマーセット
        g_tm = threading.Timer( 0.5 , tm_callback )
        g_tm.start()

mainのループでは、

         inp = GPIO.input(btn_pin)
        if inp == 1:
            GPIO.output(led_pin, 0)
        else:
            GPIO.output(led_pin, g_ledOn)
                       
タイマー割り込みで生成したg_ledOnを使って点滅します。

LEDとスイッチの処理ができるようになりました。しかし、これ組込みソフトでは草野球以下のレベルです。次はどのように設計から始めるのかを紹介したいと思います。