Hatena::ブログ(Diary)

作業記録/備忘録(仮) このページをアンテナに追加 RSSフィード

2015/06/19

CAN通信させてみた(BeagleBoneBlack-RaspberryPi間) - その2(2/3)

概要

BeagleBoneBlackとRaspberryPiの間でCANを利用した簡易通信実験ができるようになるまでに必要な情報をまとめた。
ほぼ先人の情報を参考にしてできたので、内容的には、その際に使用した参考にしたサイトを中心に紹介し、自分で実際にやってみて、間違えたところやうまくいかなかったところ、気づいた点などの情報を追記する形式とした。
間が空いてしまったが第2回は、RaspberryPiでのCAN利用について。

背景

CANを喋れるモーターコントローラーの話し相手に、まずは手元にあったRaspberryPiでCANをしゃべれるようにしてみた。
RaspberryPiはデフォルトではCANは話せない。
SPIの信号をCAN化する方法があったのでそれを試して通信するまでの手順について、参考にしたサイトの情報を記載した。

環境

PC: Ubuntu14.04 64bit (RasPi kernelのクロスコンパイル用)

仮想系。母艦はMacBookProのVirtualBoxWindows8.1のVMwarePlayer

リンク

写真

  • 作ったものたちは以下(クリックで拡大します)
  • 全体像。RasPi B+と、CANのコントローラ(MCP2515)、トランシーバ(MCP2551)を載せた基盤。
    • f:id:nihohi:20150618183005j:image:w240
  • CANの変換基盤(コントローラ+トランシーバ)。図中の緑と橙の線がCAN_HとCAN_L
    • f:id:nihohi:20150619190931j:image:w240
  • RaspberryPi B+
    • f:id:nihohi:20150619191007j:image:w240
  • 参考にした回路図+メモ。回路図は上記リンク先のもの。
    • f:id:nihohi:20150619190959j:image:w240

次回は、BeagleBoneBlack側のCANエレキ、ソフトの準備などについて記載予定。相互通信させてみた結果など。

2015/01/21

CAN通信させてみた(BeagleBoneBlack-RaspberryPi 間) - その1(1/3)

概要

BeagleBoneBlackとRaspberryPiの間でCANを利用した簡易通信実験ができるようになるまでに必要な情報をまとめた。
ほぼ先人の情報を参考にしてできたので、内容的には、その際に使用した参考にしたサイトを中心に紹介し、自分で実際にやってみて、間違えたところやうまくいかなかったところ、気づいた点などの情報を追記する形式とした。
初回は、CANのプロトコル仕様について。

背景

モータードライバをCANでコントロールする必要に迫られ、とりあえずCANってどういう仕様?というお勉強から、具体的に動かすために何が必要か(エレキ、ソフトウェア)の調査、実際に作ってみて・buildして実験まではできたので、それをまとめてみることにした。

環境

PC: Ubuntu14.04 64bit (RasPi kernelのクロスコンパイル用)

仮想系。母艦はMacBookProのVirtualBoxWindows8.1のVMwarePlayer

ロジックアナライザ: LogicCube(LAP-C16032)

StrawberryLinuxや秋月などで10k-12kほどで買えます。マルツでも買えるけどプローブが2個しかついてないみたい。
(マルツの方が安いのでプローブ持ってる人/使わない人は、そちらでいいかも)

リンク

まずは、CANの仕様について以下のサイトでお勉強してみた。
序章含めて全7回分あり、以下の4回を中心に読み進めた。

上記サイトから、CANの特徴を表し重要と感じたキーワードをピックアップすると以下。
使う分には、ざっくりと以下の意味と背景を知り、トラブルが発生した時にキーワードが思い出せれば最初の段階としてはいいのではなかろうか。(と勝手に思ってる)

感想としては、基本的には、IDとデータがあれば通信できると理解。
それをうまく動かす工夫として、ドミナントの意味と背景、ビットスタッフィングルールとエラー処理あたりがよく考えられてるなぁと感じた。
2線式だが低速の時は、1本切れても通信できたりも。

次回は、RasPi側のCANエレキ、ソフトの準備などについて記載予定。徐々にまとめる予定。

2014/08/29

BBB(Ubuntu12.04)で11ac WLANアダプタを利用する

概要

BeagleBoneBlack(BBB)で802.11ac無線LANアダプタ(WDC-867U3/添付写真も参照)を使えるようにする。
f:id:nihohi:20140830000803p:image:w240

背景

ある探査ロボットを遠隔無線操縦し、画像転送を行う必要があり、帯域を広めに利用したかった。
BBB用に、.11ac WLANドライバをbuildしたので、そのdriverと使い方を公開する。ドライバのbuild方法は後日記載予定。

環境

BeagleBoneBlack(BBB) Ubuntu 12.04

WLAN adaptor:ELECOM WDC-867U3

使い方

8812au.koをdownloadする。
https://github.com/nihohi0428/11ac_driver_for_BBB/tree/master

$ sudo cp 8812au.ko /lib/modules/3.8.13-bone30/kernel/net/wireless/
$ sudo chmod 644 /lib/modules/3.8.13-bone30/kernel/net/wireless/8812au.ko 
$ sudo /sbin/depmod -a 3.8.13-bone30

WLANアダプタを刺す。

$ sudo modprobe 8812au

11acとして使えてることが分かる。

$ sudo iwconfig
wlan0     IEEE 802.11AC  ESSID:"xxxxx"  Nickname:"xxxxx"
          Mode:Managed  Frequency:5.5 GHz  Access Point: DC:FB:02:xx:yy:zz
          Bit Rate:867 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:****-****-****-****-****-****-****-****   Security mode:open
          Power Management:off
          Link Quality=100/100  Signal level=-45 dBm  Noise level=0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

lo        no wireless extensions.

eth0      no wireless extensions.

rename4   unassociated  Nickname:"xxxxx"
          Mode:Managed  Frequency=2.412 GHz  Access Point: Not-Associated   
          Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=0/100  Signal level=0 dBm  Noise level=0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

buildの仕方

  • (後日記載予定)

2012/11/24

Raspberry Piが届いた(2) 環境構築〜OSのインストール〜

Raspberry Piでは、すでに開発コミュニティ(?)の方がOSを作られているので、それを使ってみることにした。
今回はSDカードは16GBのものを用意した。4GB以上が推奨らしい。

Raspbian "wheezy"というRaspberry Pi向けにdebianを改造したもののようだ。
(Raspberry+debianからきているらしい)
http://www.raspbian.org/

ダウンロードは以下からでき、このwheezyを使うことが推奨されているらしい。
http://www.raspberrypi.org/downloads

2012-10-28-wheezy-raspbian.zip(434MB)をダウンロードすることにした。(結構時間がかかる.
30分以上?)
bit torrentだと速い+助かるとのことだが、事情により今回はhttpでダウンロードすることに(すみません)

(http://www.raspberrypi.org/downloads より)
...(略)... the total number of concurrent direct downloads is limited, so we encourage you to use the torrent file if at all possible. It’s helpful to us if you download the torrent from this page, because it means we can see how many downloads are going on and use that to make rough predictions about sales.


イメージのzipファイルをダウンロードできた。
ところで、SDカードには、unzipしたイメージ(1.8GBほど)をddコマンドなどで書き込むように、とのこと。
そのままドラッグ&ドロップでは動かないそうだ。(まぁ、そうだよな。)
で、以降は(仮想系に用意した)Ubuntu 10.04で作業を進める。

To use an image file, you will need to unzip it and write it to a suitable SD card using the UNIX tool dd. Windows users should use Win32DiskImager. Do not try to drag and drop or otherwise copy over the image without using dd or Win32DiskImager – it won’t work. If you’re still not clear on what to do, the community on the Raspberry Pi Wiki has written a guide for beginners on how to set up your SD card.


...と思ったら、仮想系のUbuntuでうまくSDカードを認識できなかったので、WindowsのWin32DiskImagerを使って書き込む。Windows7(64bit)でも使えた。
f:id:nihohi:20121125005529p:image

write successfulが出て書き込み終わったので、Raspberry Piに載せて起動してみる。
ホントにこんなに簡単に動くのだろうか。少々不安に...。

以下起動途中の画像を。
USBキーボードもつないでみた
f:id:nihohi:20121125010108j:image:w360

起動!
f:id:nihohi:20121125010157j:image:w360
驚き!
一発で動いた。これまでこの手ので一発で動いたことってなかったのにちょっと感動。

configuration画面
f:id:nihohi:20121125010253j:image:w360
cpu/mem情報(ARMv6-compatible 700MHz/Mem 512MB)
f:id:nihohi:20121125010521j:image
network device情報(まだつないでないがeht0がみえる)
f:id:nihohi:20121125010547j:image
login画面。
f:id:nihohi:20121125014621j:image
説明用紙に書いてるlogin名、passwordでログインする。
(しかしこれ、serverにするとき、要注意だね。)

そしてなんとGUIも最初から動くという(startxすれば)。すげー。
f:id:nihohi:20121125014654j:image:w360
だがしかし、マウスをつないでないので何もできずにCUIへ...。
python:2.7.3rc2、kernel:3.2.27+。メイン機のpython,kernelより新しい...。
f:id:nihohi:20121125014754j:image:w640

何か色々と凄くて感動。
いまはコンポジットでつなげてるので画質が悪いので、VNCか、ssh -Xで飛ばしてみることに。
その辺りを次回書くかも。