ワークショップ「Intel IoT」。 Galileo Gen2-LinuxおよびArduino

「ワークショップ」のこの部分では、Intel Galileo Gen2を本格的なLinuxコンピューターに変え、ArduinoとLinuxコンポーネントを簡単にやり取りする方法を示します。











microSDカードが必要です(8GBおよび10番目のパフォーマンスクラスから推奨)。16GBカードを使用しました。 Macですべてのステップを実行します。Windowsおよび* nixプラットフォームでは、すべてが同様です(もちろん、オペレーティングシステムの対応する「修正」を使用)。



SDカードの準備



Galileoの場合、開発チームは特別なLinuxイメージYoctoをリリースします



1.最初に、イメージの最新バージョンをダウンロードする必要があります。 これは、たとえば、 このリンクで実行できます。



2.ダウンロードしたファイルを解凍します。



Mac:Downloads user$ bunzip2 iot-devkit-latest-mmcblkp0.direct.bz2
      
      





3. microSDをコンピューターに接続して識別します(ラップトップ用のデータ出力を持ち込みます)。



 Mac:Downloads user$ diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *121.3 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_CoreStorage 120.5 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 #: TYPE NAME SIZE IDENTIFIER 0: Apple_HFS Macintosh HD *120.1 GB disk1 Logical Volume on disk0s2 9735977A-C01B-4DDC-8167-7F1238330E9D Unencrypted /dev/disk2 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *15.9 GB disk2 1: Windows_FAT_32 NO NAME 15.9 GB disk2s1
      
      





私の場合、カードは/ dev / disk2です(実際のカードは異なる場合があります)。



4.このディスクをアンマウントします



 Mac:Downloads user$ diskutil unmountDisk /dev/disk2 Unmount of all volumes on disk2 was successful
      
      





5. 「dd」コマンドを使用して、イメージをmicroSDカードにコピーできます。



 Mac:Downloads user$ sudo dd if=iot-devkit-latest-mmcblkp0.direct of=/dev/disk2 bs=8m 131+1 records in 131+1 records out 1103102976 bytes transferred in 345.586518 secs (3191973 bytes/sec) Mac:Downloads user$ sync
      
      





画像をカードにコピーするには、ほぼ6分かかりました-しばらくお待ちください(この時点では、プロセスの進行状況は端末にまったく表示されません)。



これらの簡単な手順を完了すると、microSDカードの準備が整います。



最初にIntel Galileo Gen2でLinuxを実行して構成します



これらの手順の過程で、Intel Galileo Gen2はほぼ普通のLinuxコンピューターであることを示します。



実際には、Intel Galileoスロットにカードを挿入し、LANケーブルを接続し、電源を接続します。 Linuxコンピューターがロード中です。 より明確にするために、UARTコネクタに接続してさまざまな診断メッセージを受信し、ダウンロードの進行状況を監視し、追加の「コンソール」を整理することを強くお勧めします。 「プログラマー」 Foca v2.2 (FT232RLに基づいて構築)を使用します。



Macシステムでは、 goSerialアプリケーションを使用すると便利です。 接続パラメーターは次のとおりです(ポートを選択します)。





システムが起動すると、プロンプトが表示されます。ユーザー名(root)を入力する必要があります。 その後、Linuxコマンドを端末に送信できます。



システムのIPアドレスを定義します。





Linuxバージョンを見てみましょう。



 root@quark01979b:~# cat /proc/version Linux version 3.8.7-yocto-standard (brendan@thorium) (gcc version 4.8.2 (GCC) ) #1 Wed Sep 3 10:41:56 BST 2014
      
      





これで、システムを少し構成できます。





SSHを介して構成を行います(ただし、IPアドレスを決定した端末から何かを行うことができます)。

これらの設定の過程で、Intel Galileo Gen2がほぼすべての優れた機能を備えたLinuxを実行することを示したいと思います。



nanoをインストールする



1.ルートとしてSSH経由でIntel Galileo Gen2に接続します(デフォルトでは、パスワードは空白です)。



2. nano-srcフォルダーを作成します。



 Mac:Downloads user$ mkdir nano-src
      
      





3.このフォルダーに行きましょう。



 Mac:Downloads user$ cd nano-src
      
      





4. nanoソースを含むアーカイブをダウンロードします。



 Mac:Downloads user$ curl http://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz >nano-2.2.6.tar.gz
      
      





5.アーカイブを適切なフォルダーに解凍します。



 Mac:Downloads user$ tar zxvf nano-2.2.6.tar.gz
      
      





6.この新しいフォルダー(nano-2.2.6)に移動しましょう。



 Mac:Downloads user$ cd nano-2.2.6
      
      





7.次のコマンドを実行して、nanoをコンパイルおよびインストールします。



 ./configure make make install
      
      





8.ソースディレクトリを削除できます。



 cd .. cd .. rm nano-src -r
      
      





これらの簡単な手順の後、ナノフレンドリーエディターがIntel Galileo Gen2に登場しました。



コンピューター名を変更する



新しくインストールされたエディターのおかげで、これは非常に簡単です。



 nano /etc/hostname
      
      









名前を「galileo」に修正しました(次:保存を確認するために「Ctrl + X」と「Enter」で終了します)。 すぐにIntel Galileoを再起動できますが、急ぎませんが...



ルートパスワードを設定する



ここではすべてが簡単です。最も一般的なLinuxの場合と同様に行われます。



 passwd
      
      





その後、システムは新しいパスワードの入力と確認を求めます(注意、入力した文字は表示されません)。 すべてが順調であれば、システムはパスワードの変更を次のメッセージで確認します。



 passwd: password changed.
      
      





正しいタイムゾーンと時間を設定する



現在の日付/時刻を確認するには、次のコマンドを使用します。



 date
      
      





次のような情報:



 Mon Jan 26 23:51:15 UTC 2015
      
      





さらに、コマンドの表示内容を確認できます。



 timedatectl status
      
      









現在のタイムゾーンを現在のタイムゾーンに変更します(私の場合、モスクワの場合):



 timedatectl set-timezone Europe/Moscow
      
      





「使用可能な」タイムゾーンのリストは、/ usr / share / zoneinfoディレクトリにあります。

繰り返しますが、このコマンドが返す内容を確認してください。



 timedatectl status
      
      









実際、それはすでに真実のように見えますが、「思われる」だけです(モスクワのタイムシフトは現在+3時間です)。 このLinuxイメージでは、タイムゾーンデータベースの現在の情報は最新ではありません。 この状況を修正します。



1.現在のアクション用のフォルダーを作成します。



 mkdir tz
      
      





2.新しいフォルダーに移動しましょう。



 cd tz
      
      





3.タイムゾーンのデータベースの現在のバージョンをダウンロードします。



 wget http://www.iana.org/time-zones/repository/releases/tzdata2014j.tar.gz
      
      





4.結果のファイルを解凍します。



 tar xzf tzdata2014j.tar.gz
      
      





5.ヨーロッパのタイムゾーンファイルをコンパイルします。



 zic europe
      
      





もう一度確認してください:



 timedatectl status
      
      









さて、タイムゾーンは修正されました(現在、シフトが+3時間である、つまりタイムゾーンに関する情報が最新であることは明らかです)。 クロックをNTPに設定します。 これを行うには、次のコマンドを実行します。



 rdate wwv.nist.gov
      
      









タイムゾーンが整い、時間が現実に対応するようになりました。



tzフォルダーは不要になりました-削除できます。



 cd .. rm tz -r
      
      





RTCの更新



少し気を散らし、Intel GalileoのSoCにはRTC (およびバックアップバッテリーを接続するためのボード上の対応するピン)があることを思い出してください。 家庭でCR2032バッテリーとそのホルダーを見つけました。 コネクタ付きのプリミティブケーブルを作成し、このバッテリーを対応するコネクタに接続しました。 これで、監視モジュールがバックアップされました。 適切に動作するように設定するだけです。



これを行うには、RTCモジュールに現在のシステム時刻を書き込みます。そのために、次のコマンドを実行します。



 hwclock -w
      
      





次のコマンドを使用して、RTCから時間を読み取ることができます。



 hwclock -r
      
      





今、あなたはできる



 reboot
      
      





したがって、Linuxに少し慣れている人にとっては、異常なことは何も示されていません。Yoctoを搭載したIntel Galileoは、完全に「普通の」Linuxコンピューターです。 しかし、これは完全に真実ではありません...



もちろん、別のLinuxディストリビューション(たとえば、 Debian )をインストールすることもできますが、すぐに使用できるほど密接な統合はありません。



ArduinoとLinux



スケッチでIntel GalileoのArduinoおよびLinuxコンポーネントと対話するには、システム関数(const char *コマンド)を使用できます。 これは、要求をオペレーティングシステムシェルに渡す標準のC関数です。 この機能を使用して、Arudinoスケッチは、コマンドラインからターミナルを介して行ったように、Linuxと「通信」します。



テストのために、ポートモニターに次の情報を表示する簡単なスケッチャーを作成しました。





system()関数に加えて、彼はファイルシステムを操作する関数fopen()、fclose()を使用しました。 microSDカードのリソースを無駄にしないために、/ tmpフォルダー(このフォルダーはRAMにあります)のファイルを操作します。



完全なスケッチコード
 char buf[128]; void setup() { Serial.begin(115200); FILE *hostname; hostname = fopen("/etc/hostname", "r"); fgets(buf, 128, hostname); fclose(hostname); Serial.print("HOST: "); Serial.println(buf); } void loop() { /* --- - --- */ system("date > /tmp/my.txt"); //  / //      my.txt   /tmp FILE *fp; fp = fopen("/tmp/my.txt", "r"); fgets(buf, 128, fp); fclose(fp); Serial.print("Now: "); Serial.print(buf); /* --- IP- --- */ system("ifconfig | grep inet | grep -v inet6 | grep -v 127.0.0.1 | cut -d: -f2 | awk '{printf $1""\n""}' > /tmp/my.txt"); fp = fopen("/tmp/my.txt", "r"); fgets(buf, 128, fp); fclose(fp); Serial.print("Current IP: "); Serial.println(buf); /* ---  SoC --- */ int temp; temp = getQuarkTemp(); Serial.print("The temperature of the Quark SoC is "); Serial.print(temp); Serial.println(" degrees celcius."); /* --- uptime --- */ system("uptime > /tmp/my.txt"); fp = fopen("/tmp/my.txt", "r"); fgets(buf, 128, fp); fclose(fp); //Serial.print("Current IP: "); Serial.println(buf); Serial.println(); delay(30000); } int getQuarkTemp(){ char temp_raw[6]; FILE *fp; fp = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); fgets(temp_raw, 5, fp); fclose(fp); int temp = atoi(temp_raw); temp /= 100; return temp; }
      
      





作業の結果は、ポートモニターで確認できます。





スケッチの過程で、別のユーザーが接続し、ネットワークケーブルを切断し、しばらくしてケーブルを元の場所に戻しました。

同様のスケッチを使用してCAPを準備しました


つまり 完全に個別に動作する異種コンポーネントのシステム(Arduinoとlinux)は、すでにモノリシックなものに変わり始めており、開発の可能性が広がります。



たとえば、ArduinoスケッチからPythonスクリプトを作成し、実行可能にして実行することができます。 同様に、LinuxのプロセスがArduinoスケッチの動作に影響する場合、フィードバックを整理できます(これについては、「ワークショップ」の第3部で詳しく説明します)。



しかし、それだけではありません。次の出版物では、Eclipseとmraaを使用してIntel Galileoをプログラミングする方法について説明します。



ワークショップの最初の部分」: Galileo Gen2-最初の知り合い



All Articles