フォト
2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
無料ブログはココログ

2017年12月15日 (金)

電子書籍「Mastering STM32」を購入 ・・・ かなりの良本

STM32関連の書籍を探していたのですが、国内で市販されている書籍があまりなく、
洋書の電子書籍「Mastering STM32」がお薦めとのことで、購入しました。

https://www.carminenoviello.com/mastering-stm32/

01

$32.99とちょっと高いです。
まだ最初の導入部分と開発環境の構築部分までした読み進めていませんが、
STM32をマスタするにおいては、かなりの良本だと思います。
国内で出版されている書籍は古いフレームワークを利用したものばかりの中、
HALベースなのも良いです。記事内で利用しているツール類は、最近のバージョンの
ため、ずれが無いのも良いです。

また、電子出版の利点を生かして、頻繁に更新しているようです。
定期的に情報を取り込んで更新しているようなので、これ一冊持っていれば、
長く使えそうです。サポート専用サイト、フォーラムもあるので情報交換等を出来そうです。

導入部分の「1.2.2 …. And Its Drawbacks(そしてその欠点)」で、
『なんで、STM32は今一、分かりにくのだろうか?』と思っていた疑問に対する答えが
分かりました。

他のメーカーのLPC、AVR、Microchipなんかは、取りあえず無料で使える(制約あり)、
専用の統合環境を用意していますが、ST社は用意していません。
そのため、利用はそれぞれここなった環境を使っています。
幾つかの書籍なんかも、開発環境がまちまちです。
これだけでも、それそれの環境で初心者は混乱します。ネットで調べても、
自分と異なる環境の情報なので、手順なんかも違ってきます。


また、ライブラリ関係の公開ドキュメントが貧弱です。
ソースコードから生成しているので、簡単なインタエースレベルの説明しかなく、
サンプルソース付きの解説がほとんどないです。

そのほか、CubeMXの生成コードがバグが多い点にも言及しています。

英語なので、読み進めるスピードが亀ですが、ネット上の断片的な情報を探すよりも
しっかりと理解出来そうです。

去年、スイッチサイエンスで安売りしていた「ST Nucleo Board STM32F401RE」を
やっと活用出来ます。

02_2

Dscn7371

2017年12月13日 (水)

micro:bitにケースを取り付けました

micro:bit用のケースを探していると、 ELECFREAKSというところで
良さげなものが販売されているのでポチリました。

ELECFREAKS Micro:case Transparent Acrylic Case Shell Enclosure Computer Box For Microbit

01

んで、到着したので早速取り付けました。

組み立ては、説明書がなく若干手間取りました。

Dscn7354

アクリル板に張り付いている傷防止の紙が手で剥がしにくいため、
濡れたティッシュで湿らせて剥がしやすくしました。

Dscn7356

とりあず完成。

Dscn7357

裏側に単三電池が装着出来ます。
実は、この電池ボックスを取り付ける付属ねじが短くて、取り付けられませんでした。
手持ちのねじで代用しました。

Dscn7360

端子部分は剥き出しのタイプです。

Dscn7359

まあ、値段のわりには良い感じです。

さて、ここでちょっと気になったのがUSB経由の電源と、電池との併用です。
ケースを購入したELECFREAKSのサイトに回路図があり、電源部は次のような感じになっています。

02
(画像は https://www.elecfreaks.com/wiki/index.php?title=Micro:bitより引用)

整流用ダイオードBAT60Aあり、他の電源に逆流しないようになっています。
当時接続しても問題なさそうです。

USBからの電源は、USBインタフェースIC KL26Zの3.3Vレギュレーターから供給されいる
ことも分かりました。

2017年12月 9日 (土)

Arduino IDEのgccのバージョンの再認識

Arduino IDE 1.8.5の環境は、「C++11対応しているの?」とちょっと疑問に思い、試してみました。


サンプルスケッチ

//
// C++11対応の確認
//

void setup() {
  Serial.begin(9600);

  int x       {3};           // 新しい初期化形式
  int d[]     {0,1,2,3,4,5}; // 新しい初期化形式(配列)
  char *ptr   {nullptr};     // 新しい初期化形式、NULLの新しい形式
  uint16_t b  {0b11110001};  // 2進数対応

  Serial.print("x=");
  Serial.println(x,DEC);
  Serial.print("b=");
  Serial.println(b,BIN);
      
  for (auto a:d) {         // 新しい範囲指定形式 
    Serial.println(a,DEC);
  }
}

void loop() {

}

コンパイルは問題なく出来ました。実行結果も期待通りに動作しています。
う~ん、これは積極的に使っていった方がコーディング量も減り、不具合も回避できるかも..

01


裏付けを取るために、Arduinoのgccの環境周りを調べてみました。
まずは、利用しているgccのバージョンですが、
C:\Users\ユーザー\AppData\Local\Arduino15\staging\packagesの下には、
avr-gcc-4.9.2-atmel3.5.4-arduino2-i686-mingw32.zip
があります。

確認のため、インストールされているフォルダ \arduino-1.8.5\hardware\tools\avr\bin
のgcc++のバージョンを調べると4.9.2でした。

02

次にコンパイルオプション
\arduino-1.8.5\hardware\arduino\avr\platform.txt に定義されているコンパイルオプション
を調べると次の設定になっています。

compiler.c.cmd=avr-gcc
compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects


compiler.cpp.cmd=avr-g++

compiler.cpp.flags=-c -g -Os {compiler.warning_flags} -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threads

gcc4.9.2では機能的にc++11は完全対応であり、
cコンパイラはC11対応、C++コンパイラはC++11対応の指定が設定されています。

これでc++11の記述が堂々と利用出来ます。

(注意)
同じArduino IDE を利用していても、Arduino M0、DueのARMや、別のアーキテクチャのボードは、
利用しているコンパイラが異なります。この設定はAVRマイコン限定です。
他の環境については、別途調べる必要があります。

2017年12月 4日 (月)

ラズパイ版IcigoJamが公式サイトに掲載されています

IchigoJamのラズパイ版がラスパイ公式サイト ダウンロードに掲載されています。

https://www.raspberrypi.org/downloads/

01

早速、手持ちのラズパイ2で試してみました。
オリジナル版とは異なり、USBキーボードがサポートされています。
画面表示もHDMIに対応していますが、AV端子を使ってNTSCビデオ出力を試してみました。

02

config.txtファイルに sdtv_mode=1 を追加るつことでNTSCビデオ出力出来ます。

今回、ちょとハマったのがSDカードの相性問題です。
下記サイトにラズパイでのSDカードの相性についての記載があります。
https://elinux.org/RPi_SD_cards

手持ちのSanDisk製microSDカードではブートできませんでした。
手持ちのエレコム製microSDカードでは問題無く起動出来ました(写真)。

現時点では、オリジナル版の全ての機能はサポートされていません。
処理速度は、オリジナル版の50倍から100倍(利用するラズパイによる)くらい出ているようです。

移植は完成度は高く、素晴らしいのですが、
オリジナル版のインタープリタ実装方式が今一だった部分がそのまま移植されたため、
ラズパイ本来のパフォーマンス出せていないようで、ちょっと残念です。
(STM32F103C8T6の豊四季Tiny BASICよりも処理は遅いです^^)

このあたりは、改善を望みます。

2017/12/15 追記

現在ラズパイ版IchigoJamは、随時改良・更新が行われています。
描画処理がかなり改善されているようです。

2017年11月26日 (日)

microbitのエディタをブログに表示するテスト

micro:bitのエディタをブログに表示するテストです。
ココログでもできるみたいです。

2017年11月25日 (土)

micro:bitをArduino環境で使う (2)GPIOTEを使ったLチカ

今後色々と利用するために、nRF51822のリファレンス・マニュアルをちびちびと読解しています。

今日はGPIOTE(GPIO tasks and events)を使ってLチカをやってみました。
GPIOTEは、GPIOのピンの入力に対するイベント、または出力に対するタスクを定義することが出来ます。

GPIOTEは便利なのですが、4チャンネル(4つしか定義出来ない)です。
Arduino IDE環境では、GPIOピンのピン入力割り込みに利用されています。
具体的には、attachInterrupt()、detachInterrupt()です。
4チャンネル(4つしか定義出来ない)の制約から、attachInterrupt()は同時に4つまで
の利用となります。

とりえず、GPIOTEの利用の練習として、前回のLチカで利用してみました。
GPIOTEの0チャンネルを利用してLEDのポートをトグルでHIGH、LOW出力するタスクを
定義して、割り込み関数でタスクを実行します。

スケッチ


#include "nrf.h"

const int COL1 = 3;         // Column #1 control
const int LED = 26;         // 'row 1' led
uint8_t sw =0;

extern "C" void TIMER2_IRQHandler(void) {
    NRF_TIMER2->EVENTS_COMPARE[0] = 0;  // 割り込みイベントクリア
    NRF_GPIOTE->TASKS_OUT[0] = 1;       // タスク実行
    //sw =!sw;
    //digitalWrite(LED, sw);
}

void setup() {
  uint32_t ulPin;
  Serial.begin(115200); 
  Serial.println("microbit is ready!");
  
  // GPIOピンの設定
  pinMode(COL1, OUTPUT);  digitalWrite(COL1, LOW);   // COL1ピンの設定
  //pinMode(LED, OUTPUT);                            // LEDピンの設定

  // GPIOTEの設定:LEDピン・トグルタスクを定義する
  ulPin = g_ADigitalPinMap[LED];  // LEDの実ピン番号の取得 
  NRF_GPIOTE->CONFIG[0] =         // チャネル0に機能設定
    (GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos) |            // タスクモード
    (ulPin << GPIOTE_CONFIG_PSEL_Pos) |                              // ピン番号設定
    (GPIOTE_CONFIG_POLARITY_Toggle << GPIOTE_CONFIG_POLARITY_Pos) |  // 動作指定:トグル
    (GPIOTE_CONFIG_OUTINIT_Low << GPIOTE_CONFIG_OUTINIT_Pos);        // ピン出力初期値
  NRF_GPIOTE->POWER = 1;                                             // GPIOTE有効
    
  //タイマ設定
  NRF_TIMER2->TASKS_STOP = 1;                          // タイマストップ
  NRF_TIMER2->TASKS_CLEAR = 1;                         // カウンタクリア
  NRF_TIMER2->MODE = TIMER_MODE_MODE_Timer;            // モード設定:タイマモード
  NRF_TIMER2->PRESCALER   = 8;                         // プリスケーラ設定:128分周(125KHz)
  NRF_TIMER2->BITMODE = TIMER_BITMODE_BITMODE_16Bit;   // カウンタ長設定:16ビット長指定
  NRF_TIMER2->CC[0] = 62500/2;                         // コンパレータ0の設定:0.5秒周期
  NRF_TIMER2->INTENSET =                               // 割り込み設定:コンパレータ0と比較
      (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos);
  NRF_TIMER2->SHORTS =                                 // ショートカット設定:クリアタスク指定
      (TIMER_SHORTS_COMPARE0_CLEAR_Enabled << TIMER_SHORTS_COMPARE0_CLEAR_Pos);
  
  // タイマ割り込み設定
  NVIC_SetPriority(TIMER2_IRQn, 3);   // 割り込み優先度設定
  NVIC_ClearPendingIRQ(TIMER2_IRQn);  // 保留割り込みクリア
  NVIC_EnableIRQ(TIMER2_IRQn);        // 割り込み許可
  
  NRF_TIMER2->TASKS_START = 1;        // タイマスタート
  
}

void loop(){
    __SEV();
    __WFE();
    __WFE();
}


割り込み関数内で、前回のLED用のポート出力をdigitalWrite()で制御をコメントアウトして、
代わりにNRF_GPIOTE->TASKS_OUT[0] = 1 でチャネル0のタスクを実行しています。

そのタスクの定義は、下記で行っています。

  // GPIOTEの設定:LEDピン・トグルタスクを定義する
  ulPin = g_ADigitalPinMap[LED];  // LEDの実ピン番号の取得 
  NRF_GPIOTE->CONFIG[0] =         // チャネル0に機能設定
    (GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos) |            // タスクモード
    (ulPin << GPIOTE_CONFIG_PSEL_Pos) |                              // ピン番号設定
    (GPIOTE_CONFIG_POLARITY_Toggle << GPIOTE_CONFIG_POLARITY_Pos) |  // 動作指定:トグル
    (GPIOTE_CONFIG_OUTINIT_Low << GPIOTE_CONFIG_OUTINIT_Pos);        // ピン出力初期値
  NRF_GPIOTE->POWER = 1;                                             // GPIOTE有効

LEDピンのタスクを定義しています。

NRF_GPIOTE->TASKS_OUT[0] = 1によるタスク実行指示で、
動作指定をトグルにし、初期設定状態はLOWとしています。
この定義を行った場合、pinMode()によるピン機能の設定は不要となります。

割り込み関数で、NRF_GPIOTE->TASKS_OUT[0] = 1実行される度に
タスクが実行され、LEDピンの出力がトグルでHIGH,LOWと変化します。

次は、PPI(Programmable Peripheral Interconnect)を使って、
割り込みを利用せずにLチカをやってみます。
PPIは、イベントに対して実行するタスクを割り当てることが出来ます。

タイマ(TIMER2)のコンパレータとの一致イベントNRF_TIMER2->EVENTS_COMPARE[0]と
LEDの点滅タスクNRF_GPIOTE->TASKS_OUT[0] を結び付けてれば、Lチカするはずです。

前回のLチカスケッチでは、loop()で無駄に無限ループをしていました。
省電力対策を調べたところ、

void loop(){
    __SEV();
    __WFE();
    __WFE();
}

でスリープモードになり、割り込み発生時にウェイクして処理を実行してくれるようです。
  参考にしたサイト
  How do you put the nrf51822 chip to sleep? [closed]

2017年11月24日 (金)

micro:bitをArduino環境で使う (1)タイマー割り込みでLチカ

前回の「micro:bitはじめました」では、microbitをArduino IDE環境で利用出来るようにしました。
今回はそのArduinoIDEを使ってタイマー割り込みを使ってLチカをやってみました。

Dscn7318


microbitに搭載されているARM Cortex-M0 nRF51822でタイマ割り込みを行う場合、
タイマかRTCを使って実現できるようです。
今回はタイマを使って5x5マトリックス左上LEDを0.5秒間隔で点滅させてみました。


スケッチ

#include "nrf.h"

const int COL1 = 3;     // Column #1 control
const int LED = 26;     // 'row 1' led
uint8_t sw =0;

extern "C" void TIMER2_IRQHandler(void) {
    NRF_TIMER2->EVENTS_COMPARE[0] = 0;  // 割り込みイベントクリア
    sw =!sw;
    digitalWrite(LED, sw);
}

void setup() {
  Serial.begin(115200); 
  Serial.println("microbit is ready!");
  pinMode(COL1, OUTPUT);
  digitalWrite(COL1, LOW);     
  pinMode(LED, OUTPUT);

  //タイマ設定
  NRF_TIMER2->TASKS_STOP = 1;                          // タイマストップ
  NRF_TIMER2->TASKS_CLEAR = 1;                         // カウンタクリア
  NRF_TIMER2->MODE = TIMER_MODE_MODE_Timer;            // モード設定:タイマモード
  NRF_TIMER2->PRESCALER   = 8;                         // プリスケーラ設定:256分周(62.5kHz)
  NRF_TIMER2->BITMODE = TIMER_BITMODE_BITMODE_16Bit;   // カウンタ長設定:16ビット長指定
  NRF_TIMER2->CC[0] = 62500/2;                         // コンパレータ0の設定:0.5秒周期
  NRF_TIMER2->INTENSET =                               // 割り込み設定:コンパレータ0と比較
      (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos);
  NRF_TIMER2->SHORTS =                                 // ショートカット設定:クリアタスク指定
      (TIMER_SHORTS_COMPARE0_CLEAR_Enabled << TIMER_SHORTS_COMPARE0_CLEAR_Pos);
  
  // タイマ割り込み設定
  NVIC_SetPriority(TIMER2_IRQn, 3);   // 割り込み優先度設定
  NVIC_ClearPendingIRQ(TIMER2_IRQn);  // 保留割り込みクリア
  NVIC_EnableIRQ(TIMER2_IRQn);        // 割り込み許可
  
  NRF_TIMER2->TASKS_START = 1;        // タイマスタート
  
}

void loop(){

}

解説

タイマー割り込みはTIMER2のレジスタを直接操作して実装しています。
(TIMER1は、PWM出力で利用されているため使わない方がよいでしょう)

まず、割り込みで呼び出される関数が、TIMER2_IRQHandler(void)です。
この関数名は固定で、extern "C"を付けてC言語互換にする必要があります。

呼び出された割り込み関数内では、割り込みイベントをクリアする必要があります。
   NRF_TIMER2->EVENTS_COMPARE[0] = 0;

にてそれを行っています。コンパレータ0を使った割り込みのため、対応するイベントを
クリアしています。

次に、タイマ設定についてすが、最初の2行はコメントの通りで、タイマをストップして
カウンタをクリアしてます。
  NRF_TIMER2->TASKS_STOP = 1;     // タイマストップ
  NRF_TIMER2->TASKS_CLEAR = 1;   // カウンタクリア

次の2行は、タイマのモード設定とプリスケーラ(分周)を設定しています。
  NRF_TIMER2->MODE = TIMER_MODE_MODE_Timer;   // モード設定:タイマモード
  NRF_TIMER2->PRESCALER   = 8;                            // プリスケーラ設定:128分周(125KHz)

タイマのモードには、タイマモードと、キャプチャモードがあります。
クロックを供給してカウントする動作を行う場合はタイマモードを指定します。

プリスケーラの設定は0~9まで指定可能です。次の表の感じでシステムクロックの
16MHzを分周して、カウンタのソースクロックの周波数を設定できます。
スケッチでは8を指定しているので、256分周で62,500Hzを利用しています。

  02

さらに次の2行はカウンタ長とコンパレータ0の値を設定しています。
   NRF_TIMER2->BITMODE = TIMER_BITMODE_BITMODE_16Bit;   // カウンタ長設定:16ビット長指定
   NRF_TIMER2->CC[0] = 62500/2;                                             // コンパレータ0の設定:0.5秒周期

TIMER2のカウンタ長は8ビット幅、16ビット幅の指定が可能です。
16ビットでは65535カウント(約1048ミリ秒)までカウントできます。

コンパレータはカウンタとの比較に利用するものです。
カウンタ値を一致した場合に割り込みを発生することが出来ます。
コンパレータは4つ利用出来ますが、ここではコンパレータ0を利用しています。

コンパレータ0のビット長はタイマのカウンタ長に準じます。
ここでは62500/2を指定しています。ちょうど0.5秒幅です。

次の4行は、割り込み条件の設定とショートカットの設定を行っています。
  NRF_TIMER2->INTENSET =                               // 割り込み設定:コンパレータ0と比較
      (TIMER_INTENSET_COMPARE0_Enabled << TIMER_INTENSET_COMPARE0_Pos);
  NRF_TIMER2->SHORTS =                                 // ショートカット設定:クリアタスク指定
      (TIMER_SHORTS_COMPARE0_CLEAR_Enabled << TIMER_SHORTS_COMPARE0_CLEAR_Pos);

NRF_TIMER2->INTENSET にはコンパレータ0を一致したら割り込み発生するように指定、
NRF_TIMER2->SHORTS には割り込みのイベント発生時にカウントをクリア(0)にする
設定を行っています。この設定を行わないと、コンパレータ0を一致した後もカウンタが
クリアされないので、割り込み周期は16ビット幅のオーバーフロー発生の周期になります。
NRF_TIMER2->SHORTSを行わずに、割り込み関数内でカウンタをクリアしても良いです。

次の3行は、割り込み優先度の設定等です(コメント参照)
   NVIC_SetPriority(TIMER2_IRQn, 3);       // 割り込み優先度設定
   NVIC_ClearPendingIRQ(TIMER2_IRQn);  // 保留割り込みクリア
   NVIC_EnableIRQ(TIMER2_IRQn);           // 割り込み許可

最後に、タイマをスタートさせます。
   NRF_TIMER2->TASKS_START = 1;        // タイマスタート

タイマについては、PPI(Programmable Peripheral Interconnect)との連携方法がまだわかりません。
PPIを使えば、割り込みを使わずにLチカ出来ると思っているのですが。

このあたりのレジスタマップ定義はArduino IDEのnRF51環境にnRF51 SDKが
組み込まれているために利用出来ているようです。
まとまったドキュメントを探しているのですが、見つからないので
Arduino IDEのnRF51環境周りをdoxygenにかけてドキュメント化して利用しています。

03_2

2017/11/25 追記
Arduino IDEのnRF51環境周りのファイルを調べると、nRF5_SDKのうち、
ヘッダファイルの一部しか入っていないことが判明。SDKは実質レジスタ等の定義のみです。





2017年11月19日 (日)

Arduino STM32で漢字表示

以前、Arduino用でやってみた「Arduino - TV出力(TVoutLibrary使用)で漢字表示」を
Arduino STM32でやってみました。

マイコンボードは、STM32F103C8T6搭載のBlack Pillボードを利用しています。
Blue Pillボードでも動きます)

自作フォントライブラリを利用しています。
  Arduino用漢字フォントライブラリ SPIフラッシュメモリ版
  https://github.com/Tamakichi/Arduino_exfonts


01

動いている様子



結線

02



スケッチ

//
// TTVOutでマルチフォント表示 by たま吉さん 2017/11/18
//  

#include <SPI.h>
#include <W25Q64.h>
#include <exfonts.h>
#include <TTVout.h>

TTVout TV;
exfonts ft;  // フォント管理オブジェクト

// 指定位置に1文字表示
void mputc(uint16_t x, uint16_t y, uint16_t code) {
  byte buf[MAXFONTLEN]; 
  ft.getFontData(buf,code); // フォントデータの取得  
  TV.bitmap(x,y, buf ,0,ft.getWidth(), ft.getHeight());
}

// 指定位置に文字列表示
void mprint(uint16_t x, uint16_t y, char* str) {
  uint16_t wstr[1024];
  int16_t   len;
  
  len = exfonts::Utf8ToUtf16(wstr, str);  // UTF8からUTF16に変換する
  for (uint16_t i=0; i <len; i++) {
    mputc(x, y, wstr[i]);
    if (x + ft.getWidth()*2 < TV.hres()) {
      x += ft.getWidth();  
    } else {  
      x = 0;
      if (y+ft.getHeight()*2 < TV.vres()) {
        y+=ft.getHeight();
      } else {  
        break;
      }
    }
  }      
}

void setup () {
  static const char* text=
   "吾輩わがはいは猫である。名前はまだ無い。"
   "どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。"
   "吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪どうあくな種族であったそうだ。"
   "というのは時々我々を捕つかまえて煮にて食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。"
   "ただ彼の掌てのひらに載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。"
   "掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始みはじめであろう。";
   
  TV.begin(SC_448x216,2); // 第2引数でSPI 1,2を指定(デフォルト 1))
  TV.adjust(2);           // 垂直同期信号補正(デフォルト 0)
  ft.init(PA4);           // フォント管理の初期化
      
  //7種類のフォントサイズで文字列表示
  while(1)
    for (uint8_t i =0 ; i <7; i++) {
      TV.fill(0);
      ft.setFontSize(i);
      mprint(0,0,(char*)text);
      delay(1000*3);
    }
}

void loop () {

}

Arduinoと比べると、SRAMが20kバイトあるため画面解像度448x216ドットを確保出来ました。 表示も速いです。

2017年11月17日 (金)

豊四季 Tiny BASIC for Arduino STM32のファームウェア書込み手順

豊四季 Tiny BASIC for Arduino STM32のファームウェア書込み手順を下記サイトにまとめました。

ブートローダ付きファームウェアのインストール手順

Photo

この手順では、Arduino環境無しにファームウェア(ブートローダ付きスケッチ)を
ボードに書き込むことでが来ます。

ただし、下記の写真のようにUSBシリアル変換モジュール(200円程度)が別途必要です。

1000

2017年11月16日 (木)

Visual Studio 2017 でArduinoを利用する

マイクロソフトの統合開発環境 「Visual Studio 2017 Community 2017」で
Arduino向けプログラムの開発が出来ると聞き、試してみました。

最近のVsual Studioは個人レベルの利用であれば、無償版の範囲でも
かなりの機能が利用できるようです。

プラグイン的な「Arduino IDE for Visual Studio」をインストールすると、
Arduinoのプラグイン的に利用していたArduino STM32もコンパイルと書き込みまで出来ました。

Vs

他に、Androidアプリ開発、マークダウンドキュメント対応と充実しています。
最近のマイクロソフトは個人開発・オープンソース開発者に優しくなった感があります^^

«豊四季Tiny BASICでHC-SR04を使った距離計測