エントリー

NOAAの受信に挑戦しているが上手くいかない

SDR(ソフトウェアラジオ)のおかげで久々ぶりにラジオが面白くなり,受信した画像のサーバ公開を目指すべき半月ほど前からNOAA(ノア)からの画像受信に挑戦

WS20210923_04.png

しかしながら現時点ではNOAAからの受信すらできていない・・・難しい

(参考サイト)ソフトウェア無線で気象衛星NOAAの画像を受信

情報ではロケーション次第ではあるがロッドアンテナでもワッチはできるとの事で先ずは自宅で受信可能かを試行している

受信機は「DS-DT305BK」で外部アンテナ接続用に変換ケーブル(MCX L字ーFメス)を購入

IMG_20211003_192527.jpg

室内アンテナでの受信はFM受信不可なので外部アンテナとしてTV用を試して少し位は聞こえると思ったがまったく(カスリも聞こえず)駄目

地元のFM放送はバリバリ聞こえるので,少しSDR側(SDR#, HDSDR)を調整してみたが変化なし

発振周波数が137~138MHzで円偏波ということもありTVアンテナでは無理があるかなと思い周波数だけでも合わせようと144/430MHz用アンテナ(安物)で試す

IMG_20211003_192430.jpg

が,同じくカスリも聞こえない

こうなると場所の問題?とも考えられるのでロケーションの良い場所へ移動して試す

IMG_20211003_103337.jpgIMG_20211003_103347.jpg

が,駄目であった

受信機「DS-DT308BK」の感度が悪いのも考えられるが,次は専用アンテナを制作(以下をエレメントにQFHアンテナを制作予定)して試行することにする

IMG_20211003_192609.jpg

栗が実った(収穫)

  • 2021/09/06 17:47
  • カテゴリー:園芸

ぽろたんの栗の実が出来ていて,ほとんどが大きくなる前に落ちてしまっていたが,1個そこそこの実がなっており開いてみると実の締まった栗が2個採れた

もう2個入っていたが,かなり小さかったので廃棄

IMG_20210905_183806.jpg

現在,もう1個育っているがどうなることか(幹は大きくならなくても実るのね)

IMG_20210906_173714.jpg

IMG_20210906_173727.jpg

残念ながらもう1本の丹沢の木は実っていない

NanoPi NEOのサーバ化(ソフトウェア)

分散移行したいサーバのセットアップを実施して1W問題なく稼働した

WS20210904_001.png

更に追加もあるが,まずは移行を完了とする

セットアップ内容は以下に記録(色付きは追記分

NTP

先ずは,RTC(DS1307)を使えるようにする(こちらを参考)

# vi /boot/armbianEnv.txt

overlays=usbhost1 usbhost2 i2c0
                           ^^^^ ← 追加
# shutdown -r now

(再起動)

# apt install i2c-tools  #i2c-toolsをインストール

# i2cdetect -y 0
     0 1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

# lsmod | grep rtc
Noting

# modprobe -c | grep ds1307

# modprobe i2c:ds1307

# lsmod | grep rtc
Noting

# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
# lsmod | grep rtc
rtc_ds1307 28672 0

# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

# ls -l /dev/rtc*
lrwxrwxrwx 1 root root 4 Aug 22 20:46 /dev/rtc -> rtc0
crw------- 1 root root 253, 0 Aug 22 20:46 /dev/rtc0
crw------- 1 root root 253, 1 Aug 22 20:58 /dev/rtc1
# hwclock -r -f /dev/rtc1    #確認

/etc/rc.local に以下を追加

/usr/sbin/modprobe i2c:ds1307
echo 'ds1307 0x68' > /sys/class/i2c-adapter/i2c-0/new_device
ln -f -s /dev/rtc1 /dev/rtc
/usr/sbin/hwclock -s

NTP の設定状況

# timedatectl status
Local time: Mon 2021-08-23 21:08:11 JST
Universal time: Mon 2021-08-23 12:08:11 UTC
RTC time: Mon 2021-08-23 12:08:24
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no

NTPを有効化する

# timedatectl set-ntp true

/etc/systemd/timesyncd.confを編集

[Time]
NTP=ntp.nict.jp → https://jjy.nict.go.jp/tsp/PubNtp/index.html
FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp

時刻同期デーモンの起動

# systemctl start systemd-timesyncd

時刻同期デーモン自動起動の設定

# systemctl enable systemd-timesyncd
# systemctl is-enabled systemd-timesyncd
RPi-Monitor

ラズパイ用のシステムモニターだが使えるようになっている

CUI

# armbianmonitor -m

GUI

# armbianmonitor -r
Installing RPi-Monitor. This can take up to 5 minutes. Be patient please

...

Now patching RPi-Monitor to deal correctly with H3

Now you're able to enjoy RPi-Monitor at http://192.168.xxx.xxx:8888

注)192.168.xxx.xxx:8888でないと参照できないようだ(IPアドレスが埋め込まれているかと)

常時起動するよう /etc/rc.local に以下を追加

/usr/bin/armbianmonitor -r > /dev/null 2>&1&

モニター表示例)CPU温度表示(2日間)

WS20210904_003.png

 

swap

実装メモリが512MBなので1GB程度のswapを設定する

ストレージがマイクロSDなのでswapパーティーションにする有効性もないためファイルにした

$ free
total used free shared buff/cache available
Mem: 503488 87696 10644 5468 405148 398600
Swap: 251740 0 251740

1GBのファイルを作成

$ sudo dd if=/dev/zero of=/var/swapfile bs=1024 count=1M
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 69.2829 s, 15.5 MB/s

パーミッションを変更

$ sudo chmod 0600 /var/swapfile

mkswapでswapファイルシステムを作成

$ sudo mkswap /var/swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=a4c1207b-65f4-42f3-be63-ea8955257f30

swaponでswap有効化

$ sudo swapon /var/swapfile
$ free
total used free shared buff/cache available
Mem: 503488 88560 9084 5468 405844 397732
Swap: 1300312 0 1300312

/etc/fstabの編集(設定を追加)

$ cat /etc/fstab
UUID=295de8c4-f8a3-40d3-9116-f2318feeed87 / ext4 defaults,noatime,commit=600,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
$ echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

※)エディタで編集の方が良い

$ cat /etc/fstab
UUID=295de8c4-f8a3-40d3-9116-f2318feeed87 / ext4 defaults,noatime,commit=600,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
/var/swapfile swap swap defaults 0 0
$
ネットワークインタフェース

現時点での最新のBuster(Armbian_21.05.1_Nanopineo2_buster_current_5.10.34.img を使用)ではMAC addressが可変になっており再起動ごとに変化する

なので,IP  addressは固定にする

# armbian-config
static で IP:192.168.xxx.xxx を設定

尚,MAC addressを固定にする安易な方法は,/etc/network/interfaces に以下を追加する

hwaddress ether aa:bb:cc:dd:ee:ff

(追記)

armbian-configで設定してもIPアドレスが固定にならないことがあった(カーネル更新で発生)

/etc/network/interfaces に追記(以下が記述可能)すれば良いようだ

auto eth0
allow-hotplug eth0
iface eth0 inet static
address <IPアドレス>
netmask 255.255.255.0
gateway <ゲートウェイアドレス>
dns-nameservers <DNSアドレス>

interfacesの編集でも不可の場合nmtuiで設定する方法もある

$ sudo nmtui
bind

本機をプライマリDNSとして稼働させる

WAN-IPアドレスはダイナミックなので内部のみ設定する(外部向けは定義できない)

bind9の導入

# apt install bind9 dnsutils ← dig コマンド用

設定ファイル(/etc/bind/named.conf)の編集

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local"; #編集(ファイル名は変更しても良い)
include "/etc/bind/named.conf.default-zones";

オプション設定ファイル(/etc/bind/named.conf.options)

options {
    directory "/var/cache/bind";

    // If there is a firewall between you and nameservers you want
    // to talk to, you may need to fix the firewall to allow multiple
    // ports to talk. See http://www.kb.cert.org/vuls/id/800113

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0's placeholder.

    // forwarders {
    // 0.0.0.0;
    // };

    //========================================================================
    // If BIND logs error messages about the root key being expired,
    // you will need to update your keys. See https://www.isc.org/bind-keys
    //========================================================================
    //BINDの利用を許す範囲
    allow-query { localhost; localnets; };

    //スレーブDNSのアドレス(内向きDNSの場合は必要ない)
    allow-transfer { none; };

    //再帰検索を許可する範囲
    allow-recursion { localhost; localnets; };

    dnssec-validation auto;

    auth-nxdomain no; # conform to RFC1035

    //listen-on-v6 { none; };
    listen-on-v6 { any; };

    //名前解決できないときにモデムに聞きに行く場合は以下
    //forwarders { 192.168.xxx.1; };
    //名前解決できないときはgoogleのDNSを使う
    forwarders { 8.8.8.8; 8.8.4.4; };

    version "unknown";
};

# EDNS0 の無効化
# "error (unexpected RCODE REFUSED) ..." 出力の抑止
    server 0.0.0.0 {
    edns no;
};

# "DNS format error ... invalid response" 出力の抑止
    logging {
    category resolver { null; };
};

内部向けゾーンファイル(/etc/bind/named.conf.local)

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

#正引きゾーン定義
zone "inoshita.jp" {
    type master;
    file "/etc/bind/inoshita.jp.lan";
    allow-update { none; };
};

#逆引きゾーン定義
zone "xxx.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/xxx.168.192.db";
    allow-update { none; };
};

正引きゾーン定義ファイル(/etc/bind/inoshita.jp.lan)

$TTL 86400
@       IN      SOA ns1.inoshita.jp. root.inoshita.jp. (
                2021082801    ; Serial
                     10800    ; Refresh
                      1800    ; Retry
                    604800    ; Expire
                     86400    ; Negative Cache TTL
)
        IN      NS     ns1.inoshita.jp.
        IN      MX 10 mail.inoshita.jp.
router  IN      A 192.168.xxx.1
nanopi  IN      A 193.168.xxx.xxx
Cubian  IN      A 192.168.xxx.xxx
ns1     IN A 192.168.xxx.xxx
mail IN A 192.168.xxx.xxx
home    IN CNAME nanopi
www     IN CNAME Cubian

逆引きゾーン定義ファイル(/etc/bind/xxx.168.192.db)

$TTL 86400
@ IN SOA ns1.inoshita.jp. root.inoshita.jp. (
2009110101 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ; Negative Cache TTL
)
IN NS ns1.inoshita.jp.
IN A 255.255.255.0
1 IN PTR router.inoshita.jp.
XXX IN PTR home.inoshita.jp.
XXX IN PTR nanopi.inoshita.jp.
XXX IN PTR ns1.inoshita.jp.
XXX IN PTR www.inoshita.jp.
XXX IN PTR mail.inoshita.jp.

/etc/resolv.conf を編集(起動時に更新されることに注意

nameserver 192.168.xxx.xxx ← 自身のIPにする

サーバ制御

# systemctl restart bind9
# systemctl status bind9.service

# service bind9 restart(旧)
DHCP

DHCPは isc-dhcp-server を導入する

# apt install isc-dhcp-server

/etc/dhcp/dhcpd.confを編集

#
# Sample configuration file for ISC dhcpd for Debian
#
#

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# option definitions common to all supported networks...
option domain-name "inoshita.jp";
option domain-name-servers 192.168.xxx.xxx, 192.168.xxx.xxx;

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

...
#ネットワークアドレスとサブネットマスク指定
subnet 192.168.xxx.0 netmask 255.255.255.0 {
    #デフォルトゲートウェイ指定
    option routers 192.168.xxx.1;
    #サブネットマスク指定
    option subnet-mask 255.255.255.0;
    #貸し出すIPアドレスの範囲指定
    range dynamic-bootp 192.168.xxx.xxx 192.168.xxx.xxx;
}

#固定IP
host WG1200HS {
    hardware ethernet aa:bb:cc:dd:ee:ff;
    fixed-address 192.168.xxx.xxx;
}

/etc/default/isc-dhcp-serverを編集

# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth0"
#INTERFACESv6=""

サーバ制御

# systemctl start isc-dhcp-server
# systemctl status isc-dhcp-server.service
# systemctl enable isc-dhcp-server
ddclient

ddclientはMyDNS未対応なので,今回から以下のシェルスクリプト(mydns.sh)に変更

#!/bin/sh
#
MYDNS_USER='userid'
MYDNS_PASSWORD='password'
#
/usr/bin/wget -O - http://${MYDNS_USER}:${MYDNS_PASSWORD}@ipv4.mydns.jp/login.html
/usr/bin/wget -O - http://${MYDNS_USER}:${MYDNS_PASSWORD}@ipv6.mydns.jp/login.html

exit 0

mydns.shをcron(rooth権限)で実行させる(以下は毎日4時に実行)

# crontab -l

0 4 * * * /usr/local/sbin/mydns.sh > /dev/null 2>&1

注)登録する際は crontab -e

nfs-client

ファイル共有化のため設定

nfsクライアントの導入

# apt install nfs-client

手動でnfsマウント(常時マウントなら/etc/fstabへ追加)

# mount -t nfs Cubian.inoshita.jp:/srv/share /srv/share

マウントを auto 化するためにautofsを導入

# apt install autofs

/etc/auto.masterへ追加

# vi /etc/auto.master

/- /etc/auto.nfs ← 追加行(ファイル名は変更可)

/etc/auto.nfsへマウントディレクトリを記載

# vi /etc/auto.nfs

/srv/share -fstype=nfs,rw Cubian.inoshita.jp:/srv/share

サーバ制御

# systemctl restart autofs
残件

残り,NTPのサーバ化(現在はNTPクライアント),Mailサーバ,UPS対応の設定を予定

NanoPi NEOのサーバ化(その2)

NanoPi NEOのサーバ化は,ひとまず運用可能レベルで完成したが,以下の改良(機能追加)を行うことにした

電源スイッチ

NanoPi NEOにはリセットスイッチが無いため,ハードリセットするためには電源をOFF/ONする必要がある

そのためUPSを組み込んだ場合,ハードリセットするにはUPS電源をOFFしないとならない

何らかの異常が発生した時に無いと蓋を開ける手間が掛かることになるだけだが電源スイッチを追加することにした

miniups_回路図_u.png

(注)無電圧時スイッチを切りにしたかったのでNチャネルFETを使ったせいでGndを共通にできなくなり嵌る

DCDCの入力に電源スイッチを設けDCDCの出力に緑LEDを消灯したことで判断できるようにする(主電源は赤LED)

IMG_20210822_172431.jpgIMG_20210822_172358.jpgIMG_20210822_172508.jpg

スイッチは3Dプリンタで作製した台座を付けてホットボンドで取付け

IMG_20210823_173809.jpg

小型スイッチなのでケースは簡単な加工で済ませた

主電源信号

長時間の停電対応ができるように停電を判断するための信号線を追加(PG11へ入力)

RTC(リアルタイムクロック)

NanoPi NEOにはRTCが無いのでソフトリセットでも日時が初期化される

日時はサーバ起動時にネット取得され更に一定期間で更新する機能もあるので常時接続運用では問題にはならないのだけどRTCモジュールを使ってみたいので追加した(専用ケースにはDS1307が付いている)

使用したのはDS1307が載っているTinyRTCモジュールで,そのまま使うには問題があるので手を加えた

TinyRTCモジュール仕様

  • リアルタイムクロックDS1307搭載,I2C接続
  • EEPROM:AT24C32(32Kb)搭載
  • 発振器動作中のバッテリバックアップモードの消費電流は500nA以下の低消費電力
  • モジュールにEEPROMを搭載しているので,日付時刻と共にセンサーなどの数値を保存することが可能
  • コンパクトなデザイン:27mm * 28mm * 8.4mm

TinyRTCモジュールは5VでNanoPi NEOは3.3V

I2Cのレベル変換もあるがTinyRTCモジュール上のプルアップ抵抗を取り除き外部で3.3Vをプルアップする

バッテリーバックアップが充電池

バックアップ電池が充電池使用(LIR2032)なので4.5V程印加されている

充電回路を無効化し同サイズのCR2032を使用する

回路図を見つけたのでTinyRTCモジュールを改造した

DS1307_circuit_u.png

  赤:プルアップ抵抗を取り除く

黄・緑:バッテリーの充電回路で取り除く(R6とD1だけでも可)

  緑:短絡(取り除いた後)

IMG_20210822_122509_u.jpg

(処理後)

IMG_20210822_162906_u.jpg

後で嵌らないように動作確認する

IMG_20210822_173755.jpg

Arduino IDEで,ファイル>スケッチ例>Wire>i2c_scannerを実行

WS_20210820_001.png

接続は問題なし(0x68がRTCで,0x50はメモリ)

確認のためのスケッチ

#include <Wire.h>
#define RTC_address 0x68
const char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

uint8_t REG_table[7];

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

//初期日時を書き込む(データ形式は二進化十進)
Wire.beginTransmission(RTC_address);
Wire.write(0x00); //Register 先頭アドレス
Wire.write(0x00); //second
Wire.write(0x34); //minute
Wire.write(0x19); //hour
Wire.write(0x04); //week
Wire.write(0x22); //day
Wire.write(0x08); //month
Wire.write(0x21); //year
Wire.endTransmission();
}

void loop() {
Wire.beginTransmission(RTC_address);
Wire.write(0x00);//Register 先頭アドレス
Wire.endTransmission();

  //RTCデータの読み込み
Wire.requestFrom(RTC_address,7);
for(int i = 0; i < 7; i++) {
REG_table[i] = Wire.read();
}

  //RTCデータ表示
Serial.print("20");
Serial.print(REG_table[6],HEX); //year
Serial.print("/");
Serial.print(REG_table[5],HEX); //month
Serial.print("/");
Serial.print(REG_table[4],HEX); //day
Serial.print("(");
Serial.print(week[REG_table[3]]);//week
Serial.print(") ");
Serial.print(REG_table[2],HEX); //hour
Serial.print(":");
Serial.print(REG_table[1],HEX); //minute
Serial.print(":");
Serial.print(REG_table[0],HEX); //second
Serial.println();
delay(1000);
}

結果

WS_20210820_002.png

正常に動作したので,バッテリーを付け正しい日時を登録しておく

バッテリー

改良によって18650ではケースのスペースが不足したのでコンパクトなリポバッテリーに変更

IMG_20210821_205919.jpg

1100mAhのリポで連続1.5A可能,過充電,過放電の安全回路も付いているので安全性も上がる

付属のコネクタはPHを小型にしたもので「Micro JST 1.25」と呼ぶらしい

基板用のコネクタが見つからなかったのでケーブル付きコネクタを購入

全体構成

IMG_20210822_202429.jpg

IMG_20210822_202845.jpg

消費電力

改良が終わりハードウェアは完成したのでバッテリーを空にして充電を含む消費電量を計測したところ0.89Aだったので約5V1Aで5W

IMG_20210823_181318.jpg

充電が終わりアイドル状態では0.17Aであった

IMG_20210825_174853.jpg

尚,充電中はMAX.0.89Aで徐々に減っていく

もう1つ改良(2021.8.26追加)

ソフトウェアの調整をしながらテスト運用していたところCPUのヒートシンクが結構熱くなっていることに気付いた

CPU温度が42℃(外気30℃)位なので大したことはないが,ケースに熱を逃がして冷却することにした

そこでケースに接触できるサイズのサーマルパッド(30x30x3)を準備して装着

IMG_20210826_190927.jpgIMG_20210826_193345.jpg

CPU温度46℃時,サーマルパッドは37.2℃に上昇

IMG_20210826_193908.jpg

ケースに放熱し経過をみると

IMG_20210826_194040.jpg

34.6℃(外気27.6℃)

32.6℃(外気26.7℃)

35.9℃(外気28.9℃)

と,十分効果あり

IMG_20210828_140422.jpg

固定設置してソフトウェアの調整,正式運用準備を進める

・・・

後に赤LEDは眩しいことに気付く・・・修理等のタイミングがあればオレンジ色にでも交換するかな

ユーティリティ

検索

エントリー検索フォーム
キーワード

過去ログ

Feed