備忘録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

USBデバイスの情報を確認する

udevのルールを作るために、ホストのUSBに繋がっているUSB-Serialの情報を取得する

# udevadm info --attribute-walk --path=/sys/bus/usb-serial/devices/ttyUSB0

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/devices/platform/imx27-usb.0/ci_hdrc.0/usb1/1-1/1-1:1.0/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="usb-serial"
DRIVER=="pl2303"
ATTR{port_number}=="0"

looking at parent device '/devices/platform/imx27-usb.0/ci_hdrc.0/usb1/1-1/1-1:1.0':
KERNELS=="1-1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="pl2303"
ATTRS{bInterfaceClass}=="ff"
ATTRS{bInterfaceSubClass}=="00"
ATTRS{bInterfaceProtocol}=="00"
ATTRS{bNumEndpoints}=="03"
ATTRS{supports_autosuspend}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceNumber}=="00"

looking at parent device '/devices/platform/imx27-usb.0/ci_hdrc.0/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{devpath}=="1"
ATTRS{idVendor}=="067b"
ATTRS{speed}=="12"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{busnum}=="1"
ATTRS{devnum}=="2"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="500mA"


このあとは、*.rulesファイルで
ACTION=="remove", GOTO="tty_end"
SUBSYSTEM!="tty", GOTO="tty_end"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", DRIVERS=="pl2303", ACTION=="add", ENV{ID_VENDOR_ID}=="067B", ENV{ID_MODEL_ID}=="2303", ENV{ID_USB_INTERFACE_NUM}=="00", KERNELS=="1-1:1.*", SYMLINK+="ttyUSB2SERIAL"
LABEL="tty_end"

な形で、デバイスをttyUSB2SERIALに固定しました。

テーマ:ハードウェア - ジャンル:コンピュータ

  1. 2016/02/02(火) 13:01:11|
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

raspberrypi UARTのメッセージと、カーネルビルド

RaspberryPiのUARTにて、ちょっと迷ったので
備忘録として残しておきます。

RaspberryPiは、起動時に、
"Uncompressing Linux..."なんてメッセージを、どうしても出力してしまいます。

どうやらOS起動時にカーネルから出力されている模様です
https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=33042&p=283774&hilit=uncompressing%2Bkernel

まぁソースコード" linux/arch/arm/boot/compressed/misc.c" L147,L153を
コメントアウトしてあげればいい模様でした。

次にカーネルの再ビルドですが、これまた、config.gzが見つからない場合がありました。
その場合は以下のコマンドで、config.gzを生成することが可能です。
$sudo modprobe configs





テーマ:ハードウェア - ジャンル:コンピュータ

  1. 2015/11/11(水) 18:16:31|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0

Edisonボードの Arduinoスケッチ 備忘メモ3

引き続きEdisonボードにおける、Arduinoスケッチに関する話です。

①system()が利用可能
 Arduinoスケッチから、コマンドをコールできます。

- - - - - - - - - - - - - - - - - - - - - - - - - -
void setup() {
 // put your setup code here, to run once:

}

void loop() {
 // put your main code here, to run repeatedly:
 system("echo helloWorld > /dev/ttyMFD2");
 delay(2000);
}

- - - - - - - - - - - - - - - - - - - - - - - - - -

ttyMFD2は、USB直接接続でのシリアルコンソールです。
ちなみに、SSH接続でのシリアルコンソールは、ttyを打って確認したところ、
/dev/pts/1
でした。

上記スケッチを動作させると、2秒おきにUSBシリアルコンソールに
helloworld
と出力されます。

続きを読む

テーマ:ハードウェア - ジャンル:コンピュータ

  1. 2014/11/13(木) 00:23:40|
  2. Intel Edison
  3. | トラックバック:0
  4. | コメント:1

Edisonボードの Arduinoスケッチ 備忘メモ


Edisonボード上で動作しているArduinoスケッチは、
純正のArduinoで動作しているものとは差異があります。

正直、情報が散在している感じで、
把握しきれてはいないのですが、
チェックできた点をメモしておきます。

①Arduinoスケッチと、Edison Yocto Linuxプロセスとの通信1
 フォーラムを見ると、これを見ろ的な感じで、下のURLへ誘導されます。
 https://software.intel.com/en-us/blogs/2014/09/22/efficient-communication-between-arduino-and-linux-native-processes#_ga=1.131696271.1267878252.1412838079 
 正直、今読み解いている段階です。
 
②Arduinoスケッチと、Edison Yocto Linuxプロセスとの通信2
 C言語が利用できるようです。このため、Arduinoスケッチから
 ログや計測結果などを、ファイルに落とすことが可能です。
 
 Arduino IDEのサンプルソースを改造して、
 温度センサの値をファイルへ出力するArduinoスケッチを作成しました。
 [ファイル]→[スケッチの例]→[01.Basics]→[AnalogReadSerial]

 ハードウェア構成は、温度センサとしてLM60DZを利用しました。
 LM60DZのVout → EdisonのArduino拡張ボードのA0へ接続
     Vss → EdisonのArduino拡張ボードの5Vへ接続
     GND → EdisonのArduino拡張ボードのGNDへ接続

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

This example code is in the public domain.
*/
#include <stdio.h>
#include <stdlib.h>

// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
// int sensorValue = analogRead(A0);
float sensorValue = analogRead(A0);

float Temperature = ((5 * sensorValue) / 1024) * 100;
Serial.print("Temperature=");
Serial.println(Temperature);

FILE *fp;
if((fp=fopen("AnalogRead.log","a"))==NULL){
fprintf(stderr, "ファイルのオープンに失敗しました.\n");
//return -1;
}
else{
int count = fprintf(fp, "read_senser=%f\n",Temperature);
if ( count < 0 ) {
fprintf(stderr, "ファイルの書込みに失敗しました.\n");
fclose(fp);
}
fclose(fp);
}

//delay(1); // delay in between reads for stability
delay(1000); // delay in between reads for stability
}


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

サンプルスケッチからの主な変更点としては、以下の処理を追加・変更しました。
1. インクルードファイルを追加
  fopenなどのC標準関数を使うために、stdio.h、stdlib.hをインクルード

2. アナログ入力A0から読み込んだ値を、温度へ変換
  analogRead(A0)の戻り値は、A0ピンに入ってくる電圧を10bit(0~1023段階)中の
  いくつであるかを返してきます。(例. 10, 50, 1020など1024までの整数)
  これは、電圧0~5Vの値として対応させるとすると・・・
  analogRead(A0)の戻り値に、(5V/1024)*1000[mV]を掛け合わせると、A0にかかっている電圧[mV]が判ります。
 
  あとはセンサLM35DZのデータシートから、「OUTPUT 0mV+10mV/℃」とのことなので
  A0電圧値を10で割れば、温度(摂氏)へ変換できます。
  このため、式にすると
  (sensorValue * (5/1024) * 1000)/10;
  = ((5 * sensorValue) / 1024) * 100;
  となります

3. ファイル出力
  C言語のファイル出力処理です。
  どこにでもある処理ですので、解説は省きます。

このスケッチで、動作させてみると
Edisonのルート直下に、AnalogRead.logというファイルが作られ、
中身をみると、以下のような温度計測ログが確認できました。
Temperature=28.81
Temperature=28.81
Temperature=28.81
Temperature=29.30

テーマ:ハードウェア - ジャンル:コンピュータ

  1. 2014/11/12(水) 11:27:50|
  2. Intel Edison
  3. | トラックバック:0
  4. | コメント:0

Edisonボード Arduino制御

1. 環境構築

 基本的には、以下からArduino開発環境をダウンロードして、展開するだけです。
 https://communities.intel.com/docs/DOC-23242
 
 ※ 解凍時にエラーがでる時は、7zipやwinrarなどを使うほうが楽です。
 
 圧縮ファイルを展開したら、中の"arduino.exe"を起動させます。
 
 起動したら、[ツール]→[マイコンボード]からIntel Edisonが選択されていること
 [ツール]→[シリアルポート]から、Edisonの仮想COMポートが指定されていることを
 確認したほうが良いです。
 
20141111_01.jpg
20141111_00.jpg


2. 動作確認

 動作確認なので、何を書いても良いのですが、
 Arduino開発環境の
 [ファイル]→[スケッチの例]→[01.Basic]→[Blink]
 あたりを選択するのが楽です。
 
 LEDのアノード(足の長いほう)をArduino拡張ボードのD13に、
 カソード(足の短いほう)を、GNDに接続するだけで確認できます。
 # 本当なら抵抗を挟むべきです。
 
 あとは、、、
 [スケッチ]→[検証・コンパイル]や、ツールバーの[検証]アイコン
 ↓
 コンパイルが正常に完了したことを確認
 ↓
 [マイコンボードに書き込む]
 ↓
 Transfer Complete と表示されるのを確認
 
 正しく動作した場合は、LEDが1秒ごとに点灯と消灯を繰り返します。
 
 ※ Windows7で開発している場合は、[マイコンボードに書き込む]で
   どうしても失敗することがあるようです。
   その時はPCの再起動をするようにと、あった気がします。
   (何かのドキュメントのFAQだったと思うのですが、思い出せません)
   まぁ非常にごく稀らしいので、あんまり気にしていません。
 
3. Arduinoの動作
 Arduinoは、edisonのYocto Linuxの中で、複数のプロセスに渡って動作しているようです。
 このため、Arduino関連の動作をどうやって停止させれば良いか悩みました。
 
 /opt/edison/の中にlauncher.sh、sketch_reset.shでざっくりと制御できるようです。
 
 # Arduinoスケッチの一時停止(再起動すると、また動きます)
  killall -HUP clloader
 
 # Arduinoスケッチの再起動
  /opt/edison/sketch_reset.sh

テーマ:ハードウェア - ジャンル:コンピュータ

  1. 2014/11/11(火) 20:25:35|
  2. Intel Edison
  3. | トラックバック:0
  4. | コメント:0
前のページ 次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。