AVTOKYO 2017
http://ja.avtokyo.org/avtokyo2017
で配布されたバッジ。
左:フル版(個人スポンサーなど向け用) 右:ボタン3つ版(一般参加者頒布用)
内蔵プログラムの機能
- Drink Ticket Request
- clicker(ミニゲーム)
- mini CTF(ミニゲーム)
- username edit
- credit
- factory reset
内蔵プログラムについての解説はこちら
https://qiita.com/lowlevel/items/12c55ce9260e7d369989
フル版とボタン3つ版の違い
ボタンの数の違いだけです。
なお、内蔵プログラムはボタン3つしか使用していません。
# Inside Hardware
搭載マイコンチップ
STM32F103C8
STMicrosystem の、32bit ARM マイコンです。
- Cortex-M3 Core
- CPU Clock 72MHz
- Flash 64KBytes(※)
スペック上は64KBytesですが、実際には128KBytesが搭載されています。
STM32の開発環境についてどのようなものがあるかの説明はこちら
https://qiita.com/nanbuwks/items/594568db3f5dc1d6c5fd
搭載しているマイコンボード
STMマイコンチップをバッジに直接搭載しているのではなく、RobotDyn社の「STM32F103C8T6 STM32 ARM Mini System Dev.board」を使いました。
これをバッジのサブ基板として搭載しています。
「STM32F103C8T6 STM32 ARM Mini System Dev.board」自体の使い方はこちら
https://qiita.com/lowlevel/items/47b0a8ba17f8afc473a6
回路図、パターン図
Pin assaignments
HACK BADGE | Discription | |
---|---|---|
BUTTON A | PA0 | Active High |
BUTTON B | PC14 | Active High |
BUTTON UP | PB5 | Active High |
BUTTON DOWN | PB6 | Active High |
BUTTON LEFT | PB7 | Active High |
BUTTON RIGHT | PB8 | Active High |
SPEAKER1 | PA10 | Active High |
SPI OLED D0 | PA5 | CLK |
SPI OLED D1 | PA7 | MOSI |
SPI OLED RES | PA3 | Reset |
SPI OLED DC | PA6 | DC(Data/Command) |
SPI OLED CS | PA4 | Cable Select |
IR RECIEVE | PB11 | RX3 |
IR SEND TRIGGER | PB10 | TX3 |
IR SEND LED | PB0,PB1 |
シルク印刷のSW-DOWN,SW-LEFT,SW-RIGHT,SW-UPはデタラメです。Sorry!
開発環境のダウンロード
様々な開発環境がありますが、ArduinoIDEを使って開発する場合は以下の通り。
Arduio_STM32 環境構築
-
Arduino 開発環境をインストールします。
https://www.arduino.cc/ -
Arduino_STM32 をダウンロードし、展開します
https://github.com/rogerclarkmelbourne/Arduino_STM32 -
展開したものを、Arduinoフォルダ(後述)の中のhardwareに配置し直します。
(Arduinoフォルダ)/hardware/Arduino_STM32-master
と配置します。先のgithubからZIPでダウンロード→展開したフォルダがArduio_STM32-masterだとすると、(Arduinoフォルダ)に、hardwareのフォルダを作成し、そこにArduino_STM32-masterを入れ、その中にLICENSE,README.md,STM32F1・・・などが入るようにします。
2. 更に、その中のexamplesにboards.txtという名前の空ファイルを作成します。
これが無いと起動時に 「.....hardware/Arduino_STM32-master/examplesにboards.txtがありませんでした。1.5以前のものですか?」 というエラーが出る)
(2018/11/1時点での最新版で確認したところboards.txtの作業はしなくても良くなったみたいです)
- Arduino IDEを起動して、<ツール>ー<ボード>ーボードマネージャで「Arduino SAM Boards(32-bits ARM Cortex-M3)」を追加します
Windows
Arduino フォルダ:「ドキュメント」フォルダの中のArduinoフォルダ
また、Windowsのみの作業として、Arduinoフォルダ中のhardware/Arduino_STM32-master/drivers/win/install_drivers.bat を管理者で実行してください。
"install drivers for the Serial and DFU (upload devices)"
ということだそうです。
なお、ST-Linkを使う場合はST-Linkのドライバのインストールも必要となります。
http://www.st.com/ja/development-tools/stsw-link009.html
このページから STSW-LINK009 をダウンロード、インストールしてください。
更に、書き込み時にST-LINK_CLI.exeを使いますがこのプログラムはMSVCR100.dllおよびMSVCP100.dll、mfc100.dllが必要となります。
これらが無いエラーと鳴った場合には、Microsoft Visual C ++ 2010再頒布可能パッケージをダウンロードし、インストルします。
Microsoft Visual C++ 2010 再頒布可能パッケージ (x86)
https://www.microsoft.com/ja-jp/download/details.aspx?id=5555
Microsoft Visual C++ 2010 再頒布可能パッケージ (x64)
https://www.microsoft.com/ja-jp/download/details.aspx?id=14632
環境のテスト時にはx64,x86両方インストールしました。x86は必須ですが、x64も必要かどうかは未チェックです。
Mac OSX
Arduino フォルダ:「書類」フォルダ中のArduinoフォルダ
Linux
Arduino フォルダ:/home/<ユーザ名>/Arduino
また、Linuxのみの作業として以下の2つの作業が必要。
まず、
(Arduinoフォルダ)/hardware/Arduino_STM32-master/tools/linux64/install.sh
を実行して再起動。
また、
http://stm32duino.com/download/file.php?id=1360
から
77-mm-usb-serport-blacklist.rules.tar.gz
ダウンロードして解凍、できた77-mm-usb-serport-blacklist.rulesを
/etc/udev/rules.dに配置し、再起動する。
これは本家のmodemmanagerに付属の77-mm-usb-serport-blacklist.rulesにSTM32の仮想ポートを加えたもの。ArduinoUnoなどの記述も増えているのでこれを使おう。
これを配置する目的は、書込やリセットなどでモード遷移してUSBシリアルデバイスが消えたり現れたりするときに、Linux側の悪いmodemmanagerが悪いことをしてATコマンドを送ったりするのを防ぐため。
(cf,http://stm32duino.com/viewtopic.php?f=22&t=1892#p25160)
これをしないと、シリアルモニタを開くときに port busy とか言われる。
Test Program
BadgeにはUSB Bootloaderが書き込まれているため、MicroUSBメモリを使って書き込みができます。
- Arduino IDEをセットアップする
- バッジとPCをmicroUSBケーブルで接続する
- Bボタンを押しながらリセットをする。Bボタンはリセットを離しても2,3秒押しておく
- 3.がうまくいくと永続ブートローダーモードになる。永続ブートローダーモードになると青LEDが1秒間に約4回点滅します。
- Arduino IDEで以下のようにスケッチ(プログラムのこと)を作り、設定を合わせて書込を行う
以下は永続ブートローダーモードとまぎらわしくなくするため、LEDを脈動するようにしたもの。
void setup() {
pinMode(PC13, OUTPUT);
}
void loop() {
int wait=1;
for ( int i = 1; i < 12; i++){
digitalWrite(PC13, HIGH);
delay(wait);
digitalWrite(PC13, LOW);
delay(wait);
wait=wait*2;
}
}
「ファイル」-「環境設定」-「書込設定」(Mac OSXの場合は「Arduino」 - 「Preferences」- 「書込設定」)で「より詳細な情報を表示する」で「書き込み」にチェックを入れると書込時に以下のように表示がされるようになります。
書込は、下の画面の右矢印ボタンです。
ST-Linkを使って書くやりかた
そのままだと、ブートローダーモードを使ってUSBケーブルで書けますが、操作に失敗してブートローダーを壊したりした場合はST-Linkを使って書き込みます。
配線は以下のようになります。
ST-Linkを使えば、ブートローダーを使わないスケッチの書込をして起動の早いアプリを作成したり、ブートローダーの復旧などもできるようになります。
ST-Linkを使った場合の書込方法やブートローダの復旧方法などはこちらをご覧ください。
https://qiita.com/lowlevel/items/47b0a8ba17f8afc473a6
Arduinoと違うところ
ポート指定の方法
PC13という名前にしてください。
OLEDディスプレイのプログラムを行うには
こちらを参照してください