NanoPi NEO でエレキー

宇都宮

2017年08月12日 15:22


RaspberryPiよりも小型でモニタ出力のないLinuxマシン NanoPi NEO(1500円程度) を動かしてみました。
インストールしたOSは「nanopi-neo_ubuntu-core-xenial_3.4.39_20170523.img」です。
Win32DiskImagerでSDイメージを作成して電源を入れupdateのみ行いました。
sshで接続する際のIPアドレスの確認はルータでDHCPで割り当てられた「FriendlyELEC」の値です。

C言語での開発に必要な gcc、WiringNP(GPIOライブラリ)はインストールimgに含まれていました。



専用の放熱板の手配を忘れていたので、そのままの状態で動作させると火傷するくらい熱くなりました。
手持ちの銅製の放熱板を付けましたが放熱能力不足のようでしたので追加で小型のファンを載せました。
特に負荷をかけない状態でCPU温度は45℃くらいで安定しました。



簡単なエレキーを作ってみました。
上記画像は、上からDOT入力、DASH入力、出力波形で、モールス信号で「CQ」を出しています。
DOT入力、DASH入力はプログラム内でプルアップされているのGNDに落とすと各出力がでるようにしてあります。
簡単なコードですがスクイズ動作しています。
今回は速度調整は省略しました。

GPIO関数で指定するポート番号は「gpio readall」の「wPi」で表示されている番号です。
(例)"15" 指定→ 8Pin(GPIOG6) が該当します。



【エレキーのサンプルコード】
#include <wiringPi.h>

// 端子番号を指定
#define P_OUT 7
#define P_DASH 15 // 8Pin(GPIOG6)
#define P_DOT 16 // 10Pin(GPIOG7)

void setDot(void) {
    digitalWrite(P_OUT,HIGH); // P_OUT端子をHighへ
    delay(100);
    digitalWrite(P_OUT, LOW);
    delay(100);
}

void setDash(void) {
    digitalWrite(P_OUT,HIGH);
    delay(300);
    digitalWrite(P_OUT, LOW);
    delay (100);
}

int main(void) {
  wiringPiSetup() ;

  pinMode(P_OUT, OUTPUT); // P_OUT端子を出力へ
  pinMode(P_DASH, INPUT); // P_DASH端子を入力へ
  pinMode(P_DOT, INPUT);
  pullUpDnControl(P_DASH, PUD_UP); // P_DASH端子をプルアップへ
  pullUpDnControl(P_DOT, PUD_UP);

  for(;;)
  {
    if(digitalRead(P_DASH)==LOW) // P_DASH端子の論理を判断
    {
      setDash();
    }

    if(digitalRead(P_DOT)==LOW) // P_DOT端子の論理を判断
    {
      setDot();
    }
  }
}


【ビルドと実行】
(サンプルコードはエディタでelekey.cで保存)
#gcc -Wall -o elekey elekey.c -lwiringPi -lpthread
#./elekey

【参考サイト】
「がとらぼ」
https://gato.intaa.net/archives/8035

「今度はCPUに挑戦」
https://zigsow.jp/item/335215/review/337814

「NanoPi NEO Wiki」
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO

「WiringNP Wiki」
http://wiki.friendlyarm.com/wiki/index.php/WiringNP:_NanoPi_NEO/NEO2/Air_GPIO_Programming_with_C

関連記事