2021年7月25日日曜日

東京オリンピック自転車ロードレースのコースを下見ドライブ

 東京オリンピックの自転車ロードレース(男子)が2021年7月24日(土)に開催されました.22日(木)が祝日だったので,下見のドライブをしてきました.

公式のコースは道志村のページなどをみてください.詳しくは【自転車で実走!】2020東京オリンピック ロードレースコース詳細が,Google Mapでコースをプロットしてあります.

今回通ったコース全体

以下のコースをドライブして来ました.

  1. 多摩センターから山中湖まで

    鎌倉街道→多摩センター(南多摩尾根幹道路)→上之根大通り→多摩中央公園通り→小山乞田線→多摩ニュータウン通り→町田街道→八王子バイパス下→国道413号→長竹川尻線→国道412号→国道413号(道志みち)→山中湖








    道志みちは初めて走ったのですが,ツールドフランスで言うとアルプスの谷間を走っているような雰囲気でした.川沿いの道でキャンプ場が多く,結構車が多かったです.特に「道の駅どうし」は,かなり賑わっていました.


  2. 山中湖から南下

    山中湖(反時計廻り)→篭坂峠→須走→須走道路→ぐみ沢IC→玉穂小学校→玉穂支所入口交差点


    須走道路は今回の自転車ロードレースのコースではありません.富士裾野の周回道路が目的地だったので,ショートカットしました.

  3. 富士裾野を周回

    玉穂支所交差点→国道469号(南方向)→原里小前交差点→国道469号→小野次交差点→パノラマロード→国道469号→富士裾野線→(富士サファリパーク入口)→南富士エバーグリーンライン→(標高1,451m)→富士山スカイライン(下り)→玉穂支所入口交差点






  4. 北上して富士スピードウェイへ

    玉穂支所交差点→国道469号(北方向)→仁杉交差点→(北方向)→(新東名高速下)→国道406号→仁杉柴怒田線→足柄停車場富士公園線→須走小山線→(富士小山病院前)→(北方向)→やまぶき通り→富士スピードウェイ東ゲート


    実際のレースはここら辺りで同じ道を何度も通るのと,結構細かく裏道を通っているので,ここも若干ショートカットしています.

帰り

帰りは足柄スマートICから東名高速で横浜町田ICまで帰って来ました.

想定外ポイント

想定外だったのは,南富士エバーグリーンラインが自動車専用有料道路で途中に料金所があります.レースの際は当然交通規制しているので自転車でも通るのですが,普段は自転車では通れない道でした.当日は天気も良く,ドライブ中は常にロードレーサーで走っている人たちを見かけていたのですが,1400mという最高到達地点に登るこのコースだけは,一般ライダーは通れず,オリンピックだけの特別コースでした.ここを除くと自転車でなぞって走ることは可能です.

本番のレース観戦

実際レースを観戦したところ,富士スピードウェイから山中湖まで,三国峠経由の道もなかなかの斜度でした.また,富士スピードウェイを,3回通り抜け,ここのメインスタンドは結構観客が入っていました.場内の実況はサッシャさんだったようです.NHKのストリーミングは国際映像を流していただけで,番組実況・解説が無かった(表彰式だけは会場のサッシャさんの声が聞けました)のですが,辻啓さんがインスタライブをやっていたようで,これを聞きながらストリーミングを見るのが良かったみたいです.

レースの結果

  • 金メダル:カラパス.今年のツールドフランスでは総合3位.
  • 銀メダル:ファンアールト.今年のツールドフランスでは山岳,個人タイムトライアル,シャンゼリゼの集団スプリントという,完全にばらばらのカテゴリーでステージ3勝.
  • 銅メダル:ポガチャル.今年のツールドフランスでは2年連続総合優勝.

結果だけ見ると,7/18(日)に終了したばかりの,今年のツールドフランスで強かった選手が,終了わずか6日後のオリンピックでも強かったです.走行距離240km,獲得標高4800m,優勝タイムが6時間5分というとんでもないコースで,130名エントリー,128名出走のうち途中リタイア43名という,かなり厳しいレースの中,日本人は新城が35位,増田は84位完走でした.

2021年7月1日木曜日

ブレッドボードで作るハイブリッド真空管アンプの写真

 ブレッドボードで作るハイブリッド真空管アンプの写真を載せておきます.設計に関する記事はこちらです.

全体の写真

真空管アンプにKORG Nutube 6P1,バッファアンプに2SK1056/2SJ160を用いた場合,このような感じになります.


真空管増幅ボード

Nutube 6P1



6AK5



6DJ8



12AU7



バッファアンプボード

MOS-FETバッファアンプボード


トランジスタバッファアンプボード


電源ボード


空気録音

実際に出てくる音はこんな感じです.







2021年6月13日日曜日

obnizのプログラムの実行形態

obnizはブラウザ上の開発ツールでプログラムを書いて,「実行」ボタンを押すことで,プログラムが実行される.ここで

  • プログラムがどこで動いているのかわからない
  • ArduinoやRaspberry Piのように,マイコンボード単体でプログラムが動いて欲しい
という気持ち悪さがあったので,プログラムの実行形態を調べてみた.

公式ガイドによると,以下のプログラム実行形態があるらしい.
  1. ブロックプログラム
    Webブラウザ上の開発環境で,Scratchのようにブロックプログラムを作成して動かす.プログラムはブラウザ上で動いている?

  2. JavaScriptプログラム
    Webブラウザ上の開発環境で,HTMLとJavaScriptを用いてプログラムを作成して動かす.プログラムはブラウザ上で動いている?

  3. node.jsプログラム
    node.jsはJavaScriptのライブラリであるが,nodeというコマンドがあって,パソコン上で実行される.node.jsプログラムは,JavaScriptで書かれたプログラムであるにもかかわらず,Webブラウザ上で動くプログラムではなく,パソコン上で動くプログラムである.これにより,ブラウザを立ち上げて特定のページにアクセスしなくてもプログラムの実行が可能である.
    node.jsプログラムは,AWS LambdaとAPI Gatewayを使ってプログラムを動かすことができる.作ったプログラムをzipファイルに固めて,AWS Lambdaサービスに登録して,AWS上でプログラムが動くらしい.さらに,AWS API Gatewayを使うことで,ブラウザから,ここに置いてあるプログラムを実行できるらしい.

  4. ブラウザアプリ
    Webブラウザ上の開発環境で,HTMLとJavaScriptを用いてプログラムを作成したものを,クラウドに登録する.Webページに,事前にアカウントの作成とデバイスの登録が必要である.デバイスにインストールできるが,「アプリのプログラムはインストールごとにコピーされません」と書いてあるので,実行時に指定した機器番号(obniz ID)のデバイスにアクセスするだけで,実際にはプログラムはクラウド上にある.また,クラウド実行ができるとも書いてあるので,プログラムはクラウド上に常に存在し,デバイス内には書き込まれないのが正解のようである.
    となると,obnizデバイスは,センサーやアクチュエーターがWi-Fiクライアントに繋がった物理ゲートウェイで,クラウド実行されているプログラムがこのデバイスにアクセスして,センサーの情報を取り込んだりアクチュエーターを動かしたりするために存在するらしい.

  5. ホステッドアプリ
    クラウドでサーバーサイドアプリが動いていて,ここに複数のデバイスが繋がってプログラムが動く.このページを見ると,obnizプログラムのインストールの実態が判明する.デバイスの中にプログラムが書き込まれるのではなくて,指定されたデバイスにアクセスできるように紐付けられたプログラムがクラウドに登録されるということらしい.
ぱっと見える範囲で調べた感じでは,(Webブラウザでプログラムを書いている場合を含めて,)クラウド上にプログラムが置かれて,そのプログラムにはデバイスのobniz IDが書かれている.クラウド上でプログラムが実行されると,指定されたobnizに接続して,ハードウェアにアクセスするらしい.

他のマイコンボードなどと違い,クラウドベースのIoTデバイスで,「デバイスにインストール」という用語が,「プログラムとデバイスIDの紐付け」を意味すると言っても良いかも知れない.

また,ちっちゃいESP32が載ったマイコンボードの割に値段が高いなと思っていたら,これだけのクラウド環境が,デバイスを購入するだけで使用できるのだから,クラウド使用料がその値段の中に含まれていると言っても良いかも知れない.

気温や湿度,気圧,二酸化炭素濃度などを計測して,それらのデータをAmbientなどのクラウドに保存してグラフを描画したい,などという場合,センサーとWi-Fiクライアントのつながったマイコンボードがあれば,センサーで取得したデータをWi-Fi経由でいきなりクラウドに送りつけて,プログラム自体はクラウド上で動いていても良いことになる.このobnizを使用する場合,プログラムによっては,ちょっとマイコンボードとしての考え方を変えて,ArduinoやRaspberry Piとは違うものと考える必要があるかも知れない.

2021年6月12日土曜日

obnizを使ってみる

obnizというマイコンボードを買ってみた.値段は結構高くて,ESP32のボードに液晶とボタン,ピンソケットがついただけなのに6,000円もする.

Raspberry Pi 3Bと4Bの間くらいの値段だ.

このボードの特徴的なところは,以下のようなものらしい.

  1. 開発環境がWeb上で動いており,パソコンにインストールする必要がないこと.
  2. Web上ではブロックベースのエディタとJavaScriptベースのエディタが動いており,どちらでもプログラミングできること.
  3. obniz OSというOSがESP32で使えるため,公式のobnizボード以外でも使用可能なこと.
  4. ピン配置に制約が全くなく,電源,I/Oを全てプログラムから制御できることである(すべてのピンから1Aの出力ができるため,ピンから5Vを出すだけで電源ピンとして使用できる).
  5. どうもクラウドのライセンスも込み込みみたいで,クラウド環境をそのまま使用できる.
電源を入れると,いきなりWi-Fiを探しに行く.

Wi-Fiが無いと使えないらしい.

Wi-Fiアクセスポイントの一覧が表示されるので,アクセスポイントの接続パスワードを入れる.これは,左上の左右ダイヤル+クリックで入力する.このサイズで文字入力ができるようにしてあるのは賢い.

無事にWi-Fiアクセスポイントに接続できると,QRコードが表示される.また,右にはobnizIDという8桁の機器番号(obniz id)が表示される.
QRコードをスマホで読み取ると,いきなりプログラミングするためのWebサイトに飛ぶようになっている.
HTMLプログラム(JavaScript)とブロックプログラム(Scratchのようなもの)が使えるらしい.
「ブロックプログラムを開く」をタップすると,いきなり次の画面のようなプログラムが表示される.

画面の右上に実行ボタン「▶︎」があるので,これをタップすると,obniz上でプログラムが実行される.
ちなみに,メニューから「コードを見る」を選択すると,同じプログラムのJavaScript版を読むことができる.

このサンプルプログラムの場合,以下のようなソースコードが表示される.

<html lang="en">
  <head>
    <meta charset="utf-8" /&tt;
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script
      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
      integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
      integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
      crossorigin="anonymous"
    ></script>

    <link
      rel="stylesheet"
      href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"
    />
  </head>
  <body>
    <h3 id="bploading" style="text-align:center;">LOADING...</h3>
    <div id="OBNIZ_OUTPUT"></div>
    <br />
    
    <script
      src="https://unpkg.com/obniz@latest/obniz.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/iothome/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/airobot/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ui/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/howler2.1.2/howler.js"
      crossorigin="anonymous"
    ></script>
    
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/opencv3.4/opencv.js"
      crossorigin="anonymous"
    ></script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.3.0"></script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@2.1.0"></script>
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/posenet@2.2.2"></script>
    
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/clmtrackr.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/emotion_classifier.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/emotionmodel.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/clmtrackr/model_pca_20_svm.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/ai/index.js"
      crossorigin="anonymous"
    ></script>
    <script
      src="https://unpkg.com/obniz-parts-kits@0.16.0/storage/index.js"
      crossorigin="anonymous"
    ></script>

    
    <script>
        $("#bploading").text("RUNNING...");
        (async function(){
  var obniz, led;
  
  
  obniz = new Obniz('2040-XXXX');
  await obniz.connectWait();
  obniz.display.print('Hello, World!')
  led = obniz.wired("LED",{"anode":0, "cathode":1});
  while (true) {
  await ObnizUI.Util.wait(0);
    led.on();
    await ObnizUI.Util.wait(500);
    led.off();
    await ObnizUI.Util.wait(500);
  }
  
})();
    
    </script>
  </body>
</html>

パソコンのWebブラウザからもプログラミングできる.JavaScriptの場合には
https://obniz.io/ja/console/program
に,ブロックプログラムの場合には
に接続する.機器番号(onniz id)を聞かれるので,8桁の機器番号(obniz id)を入力するだけでプログラムを書くことができる.

機器番号(obniz id)を入れているため,クラウドからネット経由でこのボードにアクセスしてプログラムを動かしているようだ.

2021年5月17日月曜日

Raspberry Pi PicoでUSB-DAC(I2Sボードをつけて音出し)

前の投稿でRaspberry Pi PicoをUSB-DACにするソースコードをコンパイルし,ボードに書き込んで,パソコンでUSB-DACとして認識させるところまでできたので,今回は最終的に音出しまでします.

まず,I2S-DACボードはこれを使いました.Raspberry Pi Picoに足の配置が合わせてあり,そのまま挿すことができます.ボードの裏には,Raspberry Pi Picoの絵が描いてあり,挿す向きもわかります.Raspberry Pi Picoに足をはんだ付けしますが,足が曲がって付かないように,Raspberry Pi PicoとI2S DACボードの両方にピンを挿した状態ではんだ付けします.

実際に動かすには,ソースコードの書き換えが必要でした.この製品のページ

You can use Pico Audio Pack with the I2S audio examples provided by Raspberry Pi in their experimental examples (usb_sound_card and sine_wave_i2s). You'll need to #define PICO_AUDIO_I2S_DATA_PIN and PICO_AUDIO_I2S_CLOCK_PIN_BASE to 9 and 10 respectively to tell the examples which pins are being used for the audio data.

とあります.具体的にこれらの値が定義されているファイルは

pico-extras/src/rp2_common/pico_audio_i2s/include/pico/audio_i2s.h 

です.このファイルを以下のように書き換えます.


#ifndef PICO_AUDIO_I2S_DATA_PIN
//#warning PICO_AUDIO_I2S_DATA_PIN should be defined when using AUDIO_I2S
// https://shop.pimoroni.com/products/pico-audio-pack
#define PICO_AUDIO_I2S_DATA_PIN 9 // 28
#endif

#ifndef PICO_AUDIO_I2S_CLOCK_PIN_BASE
//#warning PICO_AUDIO_I2S_CLOCK_PIN_BASE should be defined when using AUDIO_I2S
// https://shop.pimoroni.com/products/pico-audio-pack
#define PICO_AUDIO_I2S_CLOCK_PIN_BASE 10 // 26
#endif


実際に使っているピン番号は12, 14, 15なので,なぜこの番号なのかは謎です.この後,pico-extrasをbuildしなおします.その上で,pico-playgroundをbuildしなおします.

pico-playground/build/usb_sound_card/usb_sound_card.uf2をRaspberry Pi Picoに書き込むと,ボードが再起動して,音がこのボード経由で出せるようになります.

I2Sボードの方はPCM5100Aで32bit, 384kHzまで出力できるのに,Raspberry Pi PicoがXMOSと違いソフトウェアで処理を実行しているので,16bit, 44.1kHz/48kHzしか出力できないのは残念です.

ただ,ソフトウェアでUSBから入力した信号をI2Sに出力しているので,ここで信号処理が色々できると面白いと思います.ソースコードの公開されているUSB-DACって,物がないので,自分でいじるには貴重はハードウェアではないでしょうか.

2021年5月15日土曜日

Raspberry Pi PicoでUSB-DAC(I2Sボード無しでbuild,installまで)

Raspberry Pi PicoでLチカの続きです.

Raspberry Pi PicoからI2S信号をI2S-DACに出力すると,Raspberry Pi PicoのUSBがパソコンに対してslave側なので,パソコンのUSBに外付けしてUSB-DACとして使えるのでは?という話です.



この商品の記述に,「カスタムUSBサウンドカード」って書いてあるので,いろいろ探してみた所,こういうソースコードを見つけました.ざっと眺めてみると,どうもUSBとI2Sを両方使っているので,USBオーディオデバイスとしてパソコンから認識されて,I2Sに信号を流し込めるっぽいです.

このページをみると,pico-playgroundはpico-extras内のライブラリを使っていると書いてあります.

まず,pico-sdkやpico-exampleディレクトリのあるディレクトリで以下ようにライブラリとexampleを取得します.

git clone -b master https://github.com/raspberrypi/pico-extras.git
git clone -b master https://github.com/raspberrypi/pico-playground.git

ここの,pico-playground/apps/usb_sound_card/がそれっぽいです.


まずは,pico-extrasからbuildします.

cd pico-extras
git submodule update --init
mkdir build
cd build
export PICO_SDK_PATH=../../pico-sdk
cmake ..
make

これでpico-extras以下が全てコンパイルできした.


次にpico-playgroundをbuildします.

cd ../../pico-playground
mkdir build
cd build
export PICO_SDK_PATH=../../pico-sdk
export PICO_EXTRAS_PATH=../../pico-extras
cmake ..
make

これでpico-extrasが全てコンパイルできました.


Raspberry Pi PicoのBOOTSELボタンを押しながらUSBケーブルでMacに接続すると,RPi-RP2という外付けストレージとして認識されます.

pico-playground/buildの中のファイルapps/usb_sound_card/usb_sound_card.uf2をRPi-RP2の中にコピーすると,RPi-RP2がアンマウントされ,Raspberry Pi Picoが再起動してプログラムが動きます.このとき,Raspberry Pi Picoは外付けUSBストレージとして認識されません.画面の一番上のオーディオボリュームをクリックしてみると,無事にオーディオ出力デバイスとして認識されているようです.


また,/アプリケーションズ/ユーティリティ/Audio MIDI設定.appを起動してみると,48kHzと44.1kHzが使えて,初期値が48kHzのオーディオデバイスとして認識されていることがわかります.



Raspberry Pi Picoに足をはんだづけするのを忘れたのと,I2S DACボードを家に持って帰ってくるのを忘れたので,とりあえず今日はここまでです.

続きはここで.

Raspberry Pi PicoのSDKをmacOSでセットアップしてC言語でLチカ

Linuxの動かないRaspberry Pi,Raspberry Pi Picoの開発環境をmacOS (Catalina 10.15.7)上に構築します.



以下のページを参照してmacOS上を構築しました.

https://fukuno.jig.jp/3116

以下のようにSDKをインストールして,コマンドラインからサンプルプログラムblinkをbuildしました.


brew install cmake
brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc

cd ~/
mkdir pico
cd pico

git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
cd ..
git clone -b master https://github.com/raspberrypi/pico-examples.git

cd pico-examples
mkdir build
cd build
export PICO_SDK_PATH=../../pico-sdk
cmake ..

cd blink
make


いつものように,まずはLチカから動かしてみます.Raspberry Pi PicoのBOOTSELボタンを押しながらUSBケーブルでMacに接続すると,RPi-RP2という外付けストレージとして認識されます.
上のコマンドラインでbuildしてできたblink.utf2ファイルをRPi-PI2の中にコピーすると,RPi-RP2がアンマウントされて,プログラムが動きます.



引き続きこのページで,Raspberry PiをUSB-DACにしてみます.

SONY SpresenseでLチカ(LEDチカチカ)on macOS

 今さらですが,SONY Spresenseボードを購入しました.このページでは,macOSでLチカ(LED点滅)するまでをメモしておきます.

参考にしたページは以下の2ページです.

https://developer.sony.com/develop/spresense/docs/introduction_ja.html

https://developer.sony.com/develop/spresense/docs/arduino_set_up_ja.html


1. 遮光シールの貼り付け

まず,Spresenseボードを開封すると,同じ袋の中に黒いシールが入っています.


これを以下のように貼り付けます.

2. シリアルポートの確認

macOSでは(2021/5/14現在, macOS Catalina 10.15.7),SpresenseボードをMacにUSBケーブルで接続したとき,Spresenseボードの青いLEDが点灯し,
コマンドプロンプトで「ls -ltr /dev」 というコマンドの出力が以下の赤枠のようになっていれば,認識されています.

このうち,「cu.SLAB_USBtoUART」を使います.

3. Arduinoのセットアップと起動

Arduinoの公式サイト
から,macOS用のArduinoをダウンロードします.
上のようなページが表示されるので,そのまま上図の赤枠の「JUST DOWNLOAD」をクリックすると,ファイル「arduino-1.8.14-macos.zip」がダウンロードされます.このファイルをダブルクリックして展開すると,Arduinoのアプリケーション「Arduino.app」が展開されます.このファイルを「/Applications」フォルダーに移動してください.Arduino.appをダブルクリックして起動すると,以下のようなダイアログが表示されるので,
そのまま「開く」をクリックするとArduinoアプリケーションが起動します.

4. Spresense用のArduinoの設定

ArduinoをインストールしただけではSpresenseは使えないので,使えるようにします.メニューバーの「Arduino」→「Preferences...」を選ぶと,次のような環境設定ダイアログが開きます.赤枠で囲われた「追加ボードのマネージャーのURL:」にURLを追加します.
赤枠の右端のボタンをクリックして,「追加のボードマネージャーのURL」ダイアログを開きます.URL
https://github.com/sonydevworld/spresense-arduino-compatible/releases/download/generic/package_spresense_index.json
を追加します.ブラウザ上で上のリンクを右クリックして,「リンクをコピー」して,ペーストすれば良いでしょう.OKボタンで「追加のボードマネージャーのURL」ダイアログを閉じ,「環境設定」ダイアログも閉じます.

次に,メニューバーで「ツール」→「ボード"(何かが表示されている)"」→「ボードマネージャ...」を選択します.
「ボードマネージャ」ダイアログが開きます.
上のテキストボックスに「Spresense」と書き込むと,上の図のようにSpresense Reference Boardが表示されるので,「インストール」ボタンをクリックします.インストールが終わったら,次の図のように「インストール」ボタンが消えます.
このダイアログを閉じます.

次に,Spresenseボードを選択します.次の図のように「ツール」メニュー→「ボード:"(何かが表示されている)"」→「Spresense Boards」→「Spresense」を選択します.
次にシリアルポートを選択します.「ツール」メニュー→「シリアルポート:"(何かが表示されている)"」→「cu.SLAB_USBtoUART」を選択します.
次に書込装置を選択します.「ツール」メニュー→「書込装置:"(何かが表示されている)"」→「Spresense Firmware Updater」を選択します.
このボードにはブートローダが書き込まれていないので,ブートローダを書き込みます.「ツール」メニュー→「ブートローダを書き込む」を選択します.
書き込みが始まると,次のようなダイアログが表示されます.
左下に表示されている,赤枠で囲われたチェックボックスにチェックを入れると「OK」ボタンがクリックできるようになるので「OK」ボタンを押してください.
Arduinoのウィンドウに「ブートローダの書き込みが完了しました.」と表示されたら,プログラミングの準備は終了です.

5. サンプルプログラムの書き込み・動作

次のようなプログラムを書き込むことにします.
以下からプログラムをコピペしてください.「ファイル」メニュー→「名前をつけて保存」を選択し,適当な場所に「LED1」という名前でプログラムのスケッチを保存することにします.

void setup() {
    pinMode(LED0, OUTPUT);
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
}

void loop() {
    digitalWrite(LED0, HIGH);
    delay(100);
    digitalWrite(LED1, HIGH);
    delay(100);
    digitalWrite(LED2, HIGH);
    delay(100);
    digitalWrite(LED3, HIGH);
    delay(1000);

    digitalWrite(LED0, LOW);
    delay(100);
    digitalWrite(LED1, LOW);
    delay(100);
    digitalWrite(LED2, LOW);
    delay(100);
    digitalWrite(LED3, LOW);
    delay(1000);
}
上の図の左から2番目にある「→」が書き込みボタンです.このボタンをクリックすると,ボードにプログラムが書き込まれ,ボードがリセットされてプログラムが動きます.

4個のLEDが順に点灯して,順に消灯するという動作を繰り返します.

プログラムはフラッシュメモリに書き込まれているので,パソコンからUSBケーブルを抜いて,モバイルバッテリーに繋いでも動作します.

2021年4月25日日曜日

Eclipse (pleiades)のインストール方法(2021/4/25現在)

Javaの開発環境Eclipseを日本語化したpleiadesが,Windows10ではインストールできないので,以下でインストール方法を示します.


Eclipse (pleiades) のダウンロード

Webブラウザで https://mergedoc.osdn.jp/ にアクセスすると,以下のような画面が表示されます.



ここでは最新版の「Eclipse 2021」をダウンロードするので,左上の赤い丸で囲まれた青いボックスをクリックします.

すると,以下のような画面が表示されます.


ここではJavaのFull Editionをダウンロードしたいので,上の画像で赤丸で囲まれた「Download」をクリックします.

上のようなダイアログが表示されるので,「保存」ボタンをクリックすると,「ダウンロード」フォルダにファイル「pleiades-2021-03-java-win-64bit-jre_20210328.zip」がダウンロードされます.


7zipのダウンロード

2021年4月現在,pleiadesの最新版は7zipで展開できるようです.https://sevenzip.osdn.jp/download.html にアクセスすると,以下のような画面が表示されます.


ここでは64bit版をインストールするので,上から2番目の「ダウンロード」をクリックします.


上の図のようなダイアログが表示されるので,「保存」ボタンをクリックすると,「ダウンロード」フォルダにファイル「7z1900-x64.exe」がダウンロードされます.

これで,以下のように「ダウンロード」フォルダの中にEclipse (pleiades)と7zipがダウンロードされました.



7zipのインストール

まず7zipをインストールします.ファイル「7z1900-x64.exe」をダブルクリックしてください.

画面がグレイになって,「この不明な発行元からのアプリがデバイスに変更を加えることを許可しますか?」というダイアログボックスが表示されたら,「はい」をクリックします.

すると,以下のように7zipのインストールされるディレクトリを選択するダイアログが表示されます.


そのまま「Install」ボタンをクリックすると7zipのインストールが開始されます.インストールが終了すると,以下のようなダイアログが表示されます.


そのまま「Close」ボタンをクリックすると,7zipのインストールが終了して,Eclipse (pleiades)がインストールできるようになります.


Eclipse (pleiades) のインストール

以下の図のように,ファイル「pleiades-2021-03-java-win-64bit-jre_20210328.zip」を右クリックし,ポップアップメニューから「7-Zip」→「展開...」を選択してクリックします.


次の図のように,ファイルの展開先を選択するダイアログが表示されます.


次の図のように,展開先を「C:\」と書き換えます.


この状態で「OK」ボタンをクリックすると,以下のようなダイアログが表示されて,Eclipseのアーカイブファイルが展開されます.


ファイルの展開が終了すると,このダイアログは自動的に閉じます.

これで,「C:」ドライブの「C:\」ディレクトリの中にディレクトリ「pleiades-2021-03-java-win-64bit-jre_20210328」ができて,


このディレクトリをダブルクリックすると,中にディレクトリ「pleiades」があります.



このディレクトリの中に「eclipse」というディレクトリがあり,

このディレクトリの中にファイル「eclipse.exe」ができています.



Eclipse (pleiades) の起動

上の図のファイル「eclipse.exe」をダブルクリックすると,次のようなダイアログが表示され,Eclipseが起動します.しばらく時間がかかります.

起動の途中で以下のようなダイアログが表示された場合には,「アクセスを許可する」をクリックしてください.次からは表示されなくなります.

しばらく経つと,次のように,ワークスペース(作業ディレクトリ)を選択するダイアログが表示されます.ここではそのまま「起動」ボタンをクリックします.

すると,タスクバーのアイコンが変わってEclipseが再起動し,以下のようなウィンドウが表示されます.

このとき,タスクバーには以下の赤丸で囲ったようなアイコンが表示されています.

このアイコンを右クリックして,「タスクバーにピン留めする」を左クリックすると,以下の図のようにアイコンがEclipseのものに変わります.

こうすると,アプリケーションを終了してもアイコンがタスクバーに表示されたままになり,次からはこのアイコンをクリックすることでEclipseを起動できます.


ワークスペースのパス

このとき,ワークスペース「../workspace」は,ファイルeclipse.exeのあるディレクトリから見た相対パスなので,フォルダ「eclipse」から1個上のディレクトリの中の以下のディレクトリになります.

ワークスペースをアクセスしやすい場所に指定したい場合はパス「../workspace」を「C:\Users\(ユーザー名)\Eclipse」などに変更すると良いでしょう.