#author("2025-12-29T09:22:46+09:00","default:TESLA202407","TESLA202407") #author("2025-12-31T22:33:01+09:00","default:TESLA202407","TESLA202407") [[Real2Virtual202111]] * Hardware [#pa27b5c0] (2025 8/xx までのバージョン... [[Hardware-202508xx]]) * Real->Virtual [#e5b571ff] ** 組立ておもちゃの部分 [#vaa3d291] - 知的な部品、テスラダイス(サイコロ)を組立てておもちゃを作ります。 *** サイコロの中の一つとPCの間の接続 [#p02dd4d9] - サイコロのそれぞれは、下の回路図で示すような回路を内部に持っています。 -- このサイコロの中のMbed L-TEK FFLPC546XX(以後546XX)とM5Stamp C3 (以後M5Stamp)の間がUARTで接続されています。 -- パソコンとM5Stampの間はWiFiを使って、TCP/IPでつながります。 -- M5Stamp でWiFiのサーバを動かすと同時に、TCP/IPストリーム(リモートのPC側)とUART(ローカルの 546XX)の中継サーバを起動します。 -- これにより、パソコンと、この546XXの間で、双方向に、コマンドとメッセージが流れます。 -- パソコンからM5Stampと繋がった546XXに対してコマンドを送ると、その546XXからパソコンにコマンドの実行結果がメッセージとして返ります。 - サイコロの回路図 &ref(Hardware/tesla_dice_schematic_03.png,50%); *** プローブ [#k97b2c00] - おもちゃを載せるステージがあり、それに、おもちゃとPC (Raspberry Pi)の間で情報交換するプローブが付いています。 *** 作られた「物」の情報の獲得 [#a8121a8d] - それぞれのサイコロは、構文解析木上のノードに相当します。それぞれのサイコロは以下の変数を持ちます -- myname ... 自分の名前 -- upname ... 構文解析木上の上位のノード(サイコロ)の名前 -- faceID[faceMax] ... i番目の面に、下位のノード(サイコロ)が接続されていたら、そのサイコロの接続された面の番号が入ります。接続されていない場合は、-1が入ります。-1が初期値です。 -- dirID[faceMax] ... i番目の面に、下位ノード(サイコロ)が接続されていたら、そのサイコロの接続された面の向きを表す番号が入ります。接続されていない場合は、-1が入ります。-1が初期値です。 -- myDirID[faceMax] ... i番目の面に、下位ノード(サイコロ)が接続されていたら、そのサイコロと接続された自分の面の向きを表す番号が入ります。接続されていない場合は、-1が入ります。dirID[i]とmyDirID[i]は、常に同じ値になるはずです。-1が初期値です。 -- upFaceID ... 構文解析上の上位ノード(サイコロ)が接続されていた場合、その接続面の番号が入ります。接続されていない場合は-1になり、この時は上位ノードとして、UARTと通信します。-1が初期値です。 -- FirstTime ...このサイコロが初期状態かどうかを表します。初期値の状態の時が1、そうでない時が0です。 - パソコンから、それが接続された1768に対して、サイコロ間の接続関係を再帰的に問うコマンド(srs.)が送信されます。srs は start recursive structure searchの略です。 - 546XX上でそのコマンドが解釈実行されます。 srsコマンドは以下を行います。 + + そのコマンドを受け取った以外の(M5Stampからコマンドを受け取った場合は全ての)サイコロの面の、4つの発光ダイオードから、順番に、"cq face <送信元の面の番号> dir <送信元の発光ダイオードの番号>."の信号を送信します。発光ダイオードの番号は、面と面が重なったていた時は、その向きを表します。 - "cq face <送信元の面の番号> <送信元の発光ダイオードの番号>."を受け取ったサイコロがあれば、そのサイコロは、それを受け取った面から、それを送信したサイコロに対して、"ack1 face <受け取った面の番号> dir <受け取った発光ダイオードの番号> udir <送信元の発光ダイオードの番号>."を返信します。 - その次に、もし、そのサイコロが既に、"cq"コマンドを受け取ったことがなければ、このサイコロの、受け取った面以外の面に対して、同様に、cq face <送信元の面の番号> dir <送信元の発光ダイオードの番号>."の信号を送信します。 * Mbed LPC546XXがUARTから受け取るコマンドの一覧 [#v9b8aed2] "set port <p> <n> <value>." "...<p>=PE|PME|PB|PMB <n>=0|1|...|F." "...<value> is 0 or 1." ".... if <p>=PME|PMB, 0 means output, " ".... 1 means input." "set mem <n> 1 or set mem <n> 0." " ... <n>=(0|1|...|F)+." "ask port <p> <n>." "...<p>=PE|PME|PB|PMB <n>. <n>=0|1|...|F." "get port <p> <n>." "...<p>=PE|PME|PB|PMB <n>. <n>=0|1|...|F." "ask mem <n>." " ... <n>=(0|1|...|F)+." "get mem <n>." " ... <n>=(0|1|...|F)+." "set outface <n>." "set face <n> allLED <value>." "set face <n> led|dir <value>." "send face current <strconst>." "send face <n> <strconst>." "send root <n> <strconst>." "bcast face <n> <strconst>." "cq face <n> dir <value>." "ack1 face <n> dir <value> uDir <value>." "ack2 face <n> dir <value> uDir <value>." "h. or help. or ?" "srs. ... start recursive search." "srr. ... start recursive reset." * 受信装置(工場) [#e4d23608] - &ref(Program/tesla-receiver-02.png,70%); - &ref(Program/tesla-receiver-hard-01.png,70%); ---- #counter