Raspberry Pi3【IPアドレス固定化】 [Raspberry Pi]
Raspberry Piをリモートデスクトップ接続できるようにしたのですが、
#Raspberry Pi3【初期設定⑧】リモート接続OK・・・xdrp 接続
Raspberry PiのIPアドレスの設定はデフォルトでDHCPとなっています。そのため、都度、IPアドレスが変わってしまう可能性があります。
これではリモート(デスクトップ)接続の際に、”IPアドレスは何だろう?”と調べるのは手間です。
なので、”IPアドレスを固定にしてしまいましょう”ということになります。
ネットワークは有線LANと無線LANの両方ありますので、2つとも固定化したいと思います。
【動的IPと固定IPの混在】
自宅でのインターネット構築では、1台のルータがDHCPサーバを兼ねていることが多いと思います。
設定もだいたいデフォルトで使うでしょうから、基本的にはネットワークアドレス全体においてDHCPサーバから動的にIPアドレスが割り当てられる状態だと思います。
DHCPサーバからの動的IPアドレスと手動設定の固定IPアドレスを混在するにどうしたらよいでしょうか。。。
簡単に言うと”ネットワークアドレスの範囲を2つの領域に分けてしまおう!”、ということになります。
・DHCPサーバから動的IPアドレスが割り当てられる範囲
・手動で固定IPアドレスを割り当てる範囲
例えば、サブネットマスク/24のネットワークでは、253個のIPアドレスを割り当てることができますが、
・2~100(99個):動的IPを割り当てる範囲
・101~254(154個):固定IPアドレスを割り当てる範囲
というように分割してしまえばいいわけです。
この辺りの分割の個数は、何を何台繋げるかによって変わってきますし、DHCPの設定の仕方もルータ(DHCPサーバ)の機器によって違うと思いますので、取扱説明書を参照して設定してみてください。
【dhcpcd設定ファイルの編集】
テキストエディタで、IPアドレス、サブネットマスク、デフォルトゲートウェイ、DNSサーバアドレスを追記します。
interface eth0(又はwlan0)
static ip_address=[設定したい固定IPアドレス]/24
static routers=[デフォルトゲートウェイのIPアドレス]
static domain_name_servers=[DNSサーバーのIPアドレス]
$sudo nano /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.x.xx/24
static routers=192.168.x.x
static domain_name_servers=192.168.x.x
interface wlan0
static ip_address=192.168.x.xx/24
static routers=192.168.x.x
static domain_name_servers=192.168.x.x
【ネットワーク・インターフェースを再起動】
$sudo ifconfig eth0 down
$sudo ifconfig eth0 up
$sudo ifconfig wlan0 down
$sudo ifconfig wlan0 up
【設定反映の確認】
デスクトップ画面最上部のツールバーの右側にネットワークアイコンがあります。
アイコンにマウスを当て、右クリックで「Wireless & Wired Network Setting」を表示させます。
プルダウンを利用して
Confingue:interface eth0/wlan0
を表示させて、
IPv4 Address:
Router:
DNS Servers:
に先ほど設定したアドレス値が反映されていればOKです。
なお、最初のDHCPの場合には、
Automatically configure empty options のチェックボックスにチェックが入っており、アドレスのボックスは空欄になっています。
#Raspberry Pi3【初期設定⑧】リモート接続OK・・・xdrp 接続
Raspberry PiのIPアドレスの設定はデフォルトでDHCPとなっています。そのため、都度、IPアドレスが変わってしまう可能性があります。
これではリモート(デスクトップ)接続の際に、”IPアドレスは何だろう?”と調べるのは手間です。
なので、”IPアドレスを固定にしてしまいましょう”ということになります。
ネットワークは有線LANと無線LANの両方ありますので、2つとも固定化したいと思います。
【動的IPと固定IPの混在】
自宅でのインターネット構築では、1台のルータがDHCPサーバを兼ねていることが多いと思います。
設定もだいたいデフォルトで使うでしょうから、基本的にはネットワークアドレス全体においてDHCPサーバから動的にIPアドレスが割り当てられる状態だと思います。
DHCPサーバからの動的IPアドレスと手動設定の固定IPアドレスを混在するにどうしたらよいでしょうか。。。
簡単に言うと”ネットワークアドレスの範囲を2つの領域に分けてしまおう!”、ということになります。
・DHCPサーバから動的IPアドレスが割り当てられる範囲
・手動で固定IPアドレスを割り当てる範囲
例えば、サブネットマスク/24のネットワークでは、253個のIPアドレスを割り当てることができますが、
・2~100(99個):動的IPを割り当てる範囲
・101~254(154個):固定IPアドレスを割り当てる範囲
というように分割してしまえばいいわけです。
この辺りの分割の個数は、何を何台繋げるかによって変わってきますし、DHCPの設定の仕方もルータ(DHCPサーバ)の機器によって違うと思いますので、取扱説明書を参照して設定してみてください。
【dhcpcd設定ファイルの編集】
テキストエディタで、IPアドレス、サブネットマスク、デフォルトゲートウェイ、DNSサーバアドレスを追記します。
interface eth0(又はwlan0)
static ip_address=[設定したい固定IPアドレス]/24
static routers=[デフォルトゲートウェイのIPアドレス]
static domain_name_servers=[DNSサーバーのIPアドレス]
$sudo nano /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.x.xx/24
static routers=192.168.x.x
static domain_name_servers=192.168.x.x
interface wlan0
static ip_address=192.168.x.xx/24
static routers=192.168.x.x
static domain_name_servers=192.168.x.x
【ネットワーク・インターフェースを再起動】
$sudo ifconfig eth0 down
$sudo ifconfig eth0 up
$sudo ifconfig wlan0 down
$sudo ifconfig wlan0 up
【設定反映の確認】
デスクトップ画面最上部のツールバーの右側にネットワークアイコンがあります。
アイコンにマウスを当て、右クリックで「Wireless & Wired Network Setting」を表示させます。
プルダウンを利用して
Confingue:interface eth0/wlan0
を表示させて、
IPv4 Address:
Router:
DNS Servers:
に先ほど設定したアドレス値が反映されていればOKです。
なお、最初のDHCPの場合には、
Automatically configure empty options のチェックボックスにチェックが入っており、アドレスのボックスは空欄になっています。
Raspberry Pi3【日本語環境の整備】 [Raspberry Pi]
次に日本語環境を整備します。
これも前回とほぼ同じなのですが、
#Raspberry Pi3【初期設定①】環境設定と日本語環境の整備
日本語入力ソフトとしてFcitx-Mozc(ファイティクス-モズク)を採用してみたいと思います。
#前回がIbus-Mozcだったので、変えてみようというノリです。なので使ってみて使い勝手が悪そうであれば、Ibus-Mozcにこっそり変更しているかもしれません。。。
【日本語フォントのインストール】
日本語フォントを選択
fonts-takao
fonts-ipafont-gothic
fonts-ipafont-mincho
fonts-noto
前回同様に、Notoを選択
①Mune >設定 >Add / Remove Software
②notoで検索 >「metapackage to pull Note fonts」をチェック(選択する)
③Applyでインストール (複数のパッケージをチェックして一括インストールできる)
rootを選択してパスワードを入力してインストール
【日本語入力ソフトのインストール】
GUI画面で「Add / Remove Software」からインストールできると思いますが、それも前回やったので、今回はコマンドベースでインストールしてみます。
まず、パッケージリストを最新にします。
$ sudo apt-get update
パッケージリストを最新にしたら、fcitx-mozcパッケージをインストールします。
$ sudo apt-get install fcitx-mozc
インストールが完了したら、再起動します。
【Fcitx設定】
Mune >設定 >Fcitx設定 で”入力メソッドの設定”の画面が出てきます。
「全体の設定」タブでホットキーとして”入力メソッドのオンオフを何で行うのか、という設定がありますが、最初から
Ctrl+Space
Zenkakuhankaku
が設定されています。私は以前よりCtrl+Spaceを使っているので、特に変更の必要がなかったです。
【日本語と英語の切り替え】
日本語と英語の切り替えはCtrl+Spaceで切り替えます。
Text Editorテキストエディタを立ち上げて、日本語と英語の切り替えと日本語入力ができればOKです。
これも前回とほぼ同じなのですが、
#Raspberry Pi3【初期設定①】環境設定と日本語環境の整備
日本語入力ソフトとしてFcitx-Mozc(ファイティクス-モズク)を採用してみたいと思います。
#前回がIbus-Mozcだったので、変えてみようというノリです。なので使ってみて使い勝手が悪そうであれば、Ibus-Mozcにこっそり変更しているかもしれません。。。
【日本語フォントのインストール】
日本語フォントを選択
fonts-takao
fonts-ipafont-gothic
fonts-ipafont-mincho
fonts-noto
前回同様に、Notoを選択
①Mune >設定 >Add / Remove Software
②notoで検索 >「metapackage to pull Note fonts」をチェック(選択する)
③Applyでインストール (複数のパッケージをチェックして一括インストールできる)
rootを選択してパスワードを入力してインストール
【日本語入力ソフトのインストール】
GUI画面で「Add / Remove Software」からインストールできると思いますが、それも前回やったので、今回はコマンドベースでインストールしてみます。
まず、パッケージリストを最新にします。
$ sudo apt-get update
パッケージリストを最新にしたら、fcitx-mozcパッケージをインストールします。
$ sudo apt-get install fcitx-mozc
インストールが完了したら、再起動します。
【Fcitx設定】
Mune >設定 >Fcitx設定 で”入力メソッドの設定”の画面が出てきます。
「全体の設定」タブでホットキーとして”入力メソッドのオンオフを何で行うのか、という設定がありますが、最初から
Ctrl+Space
Zenkakuhankaku
が設定されています。私は以前よりCtrl+Spaceを使っているので、特に変更の必要がなかったです。
【日本語と英語の切り替え】
日本語と英語の切り替えはCtrl+Spaceで切り替えます。
Text Editorテキストエディタを立ち上げて、日本語と英語の切り替えと日本語入力ができればOKです。
Raspberry Pi3【セキュリティ対策】パスワード変更/ユーザ追加 [Raspberry Pi]
過去記事を参考に、パスワード変更/ユーザ追加とpiユーザをsudoグループから削除して、セキュリティ対策をしていきます。
#Raspberry Pi3【初期設定②】パスワード変更/ユーザ追加
===================================
【rootパスワード設定】
①ラズパイの端末を開く
②rootユーザのパスワードを設定
$sudo passwd root
新しい UNIX パスワード入力してください:****
新しい UNIX パスワード再入力してください:****
passwd: パスワードは正しく更新されました
③ ②で設定したパスワードでログインできるか確認
su - :/root配下でrootになる
su root :そのディレクトリでrootになる
④rootユーザをログアウト
exit
【ユーザ追加作業】
①新しく「hoge」というユーザを追加
$sudo adduser hoge
ユーザ ’hoge’を追加しています...
新しいグループ ’hoge’(1001)を追加しています...
新しいユーザ ’hoge’(1001)をグループ ’hoge’として追加しています...
ホームディレクトリ ' /home/hoge'を作成しています...
' /etc/skel'からファイルをコピーしています...
新しい UNIX パスワード入力してください:****
新しい UNIX パスワード再入力してください:****
passwd: パスワードは正しく更新されました
hogeのユーザ情報を更新中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム[ ]:
部屋番号[ ]:
職場電話番号[ ]:
自宅電話番号[ ]:
その他[ ]:
以上で正しいですか?[Y/n] →Y
②追加したユーザ(hoge)をsudoグループを追加
デフォルトでsudoグループがsudoerになっているのでグループを追加するだけでOK
$sudo gpasswd -a hoge sudo
ユーザ ’hoge’をグループ sudo に追加
【piユーザをsudoグループから外す】
piユーザはRaspberry Piのデフォルトユーザでありパスワードも含めて幅広く公開されていることから、このままの状態ではセキュリティの脆弱ポイントとなってしまいます。
そのためパスワード変更とsudoグループから外します。
①piユーザのパスワードを変更
$sudo passwd pi
新しい UNIX パスワード入力してください:****
新しい UNIX パスワード再入力してください:****
passwd: パスワードは正しく更新されました
②piユーザをsudoグループから外す
$sudo gpasswd -d pi sudo
ユーザ ’pi’をグループ sudo から削除
③「/etc/sudoers」を編集 nanoコマンドで「sudors」を開く
$sudo nano /etc/sudoers
④piユーザはパスワードなしのsudo権限がある
下記の行を「#」でコメントアウトしてsudoersから除外する
/etc/sudoers
#pi ALL=(ALL) NOPASSWD: ALL
⇒自分の設定ファイルにはもともとなかったので、特に実施していません。
【piユーザの自動ログイン無効化】
起動時にpiユーザで自動ログインしてしまうので、無効化します。
①「/etc/lightdm/lightdm.conf」を編集 nanoコマンドで「lightdm.conf」を開く
$sudo nano /etc/lightdm/lightdm.conf
②下記の行を「#」でコメントアウトしてpiユーザの自動ログインを無効化する
#autologin - user = pi
ここでリブートして再ログインしたときにpiユーザで自動ログインされないことを確認できましたが、ネットで気になる記載があったので、念のため追加でやっておきます。
①「etc/systemd/system/autologin@.service」を編集 nanoコマンドで「autologin@.service」を開く
$sudo nano /etc/systemd/system/autologin@.service
②下記の行を「#」でコメントアウト
# ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
#Raspberry Pi3【初期設定②】パスワード変更/ユーザ追加
===================================
【rootパスワード設定】
①ラズパイの端末を開く
②rootユーザのパスワードを設定
$sudo passwd root
新しい UNIX パスワード入力してください:****
新しい UNIX パスワード再入力してください:****
passwd: パスワードは正しく更新されました
③ ②で設定したパスワードでログインできるか確認
su - :/root配下でrootになる
su root :そのディレクトリでrootになる
④rootユーザをログアウト
exit
【ユーザ追加作業】
①新しく「hoge」というユーザを追加
$sudo adduser hoge
ユーザ ’hoge’を追加しています...
新しいグループ ’hoge’(1001)を追加しています...
新しいユーザ ’hoge’(1001)をグループ ’hoge’として追加しています...
ホームディレクトリ ' /home/hoge'を作成しています...
' /etc/skel'からファイルをコピーしています...
新しい UNIX パスワード入力してください:****
新しい UNIX パスワード再入力してください:****
passwd: パスワードは正しく更新されました
hogeのユーザ情報を更新中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム[ ]:
部屋番号[ ]:
職場電話番号[ ]:
自宅電話番号[ ]:
その他[ ]:
以上で正しいですか?[Y/n] →Y
②追加したユーザ(hoge)をsudoグループを追加
デフォルトでsudoグループがsudoerになっているのでグループを追加するだけでOK
$sudo gpasswd -a hoge sudo
ユーザ ’hoge’をグループ sudo に追加
【piユーザをsudoグループから外す】
piユーザはRaspberry Piのデフォルトユーザでありパスワードも含めて幅広く公開されていることから、このままの状態ではセキュリティの脆弱ポイントとなってしまいます。
そのためパスワード変更とsudoグループから外します。
①piユーザのパスワードを変更
$sudo passwd pi
新しい UNIX パスワード入力してください:****
新しい UNIX パスワード再入力してください:****
passwd: パスワードは正しく更新されました
②piユーザをsudoグループから外す
$sudo gpasswd -d pi sudo
ユーザ ’pi’をグループ sudo から削除
⇒自分の設定ファイルにはもともとなかったので、特に実施していません。
【piユーザの自動ログイン無効化】
起動時にpiユーザで自動ログインしてしまうので、無効化します。
①「/etc/lightdm/lightdm.conf」を編集 nanoコマンドで「lightdm.conf」を開く
$sudo nano /etc/lightdm/lightdm.conf
②下記の行を「#」でコメントアウトしてpiユーザの自動ログインを無効化する
#autologin - user = pi
ここでリブートして再ログインしたときにpiユーザで自動ログインされないことを確認できましたが、ネットで気になる記載があったので、念のため追加でやっておきます。
①「etc/systemd/system/autologin@.service」を編集 nanoコマンドで「autologin@.service」を開く
$sudo nano /etc/systemd/system/autologin@.service
②下記の行を「#」でコメントアウト
# ExecStart=-/sbin/agetty --autologin pi --noclear %I $TERM
Raspberry Pi3【OSインストール】Raspberry Pi OSダウンロード~Raspberry Piの起動 [Raspberry Pi]
【Raspberry Pi OSダウンロード】
3年前にRaspberry Pi3(MODEL B)に『Raspbian(ラズビアン)』をインストールして起動しましたね。
あれからもう3年ですかー、早いですね。。。
正直、その後あまり活用方法もなく、コロンっと机の端で埃を被っていたPi3ですが、この度、再起動させたいと思います。
と、思ったところでいろいろと変わっていました。
すでにPi4は発売され、OSも『Raspberry Pi OS』と名称が変わっていました。。。
RaspberryPiのサイトからRaspberry Pi OSをダウンロードします。
https://www.raspberrypi.org/
Raspberry Pi OS(以前はRaspbianと呼ばれていました)は、公式にサポートされているオペレーティングシステムです。
※英語サイトですが、google翻訳で表示しています。
画面にあるように、Raspberry Pi Imagerを使用してRaspberryPiOSをインストールします。
最初に、Raspberry Pi Imagerをダウンロードします。私はWindowsを使っているので、Windows版をダウンロードします。
これまでのNOOBS v2.4.5(2017.11.29)では1.5GBのファイルサイズがあり、ダウンロードにもそれなりの時間がかかっていましたが、imager_1.5(2020.12.29)では20MB弱なのですぐにダウンロードできます。
【Raspberry Pi Imager】
では、やってみましょう。
Raspberry Pi ImagerをPCにインストールします。インストール先は選択できないようです。
①microSDカードをPCに接続して、Raspberry Pi Imagerを実行します。
②OSを選択します。
③microSDカードを選択します。
④microSDカードに書き込みます。
大体15分弱くらいで、完了画面が出ました。
【Raspberry Piの起動】
①OSを書き込んだmicroSDカードをカードスロットに挿入
②キーボード、マウス、LANケーブル、HDMIケーブルをそれぞれ接続
③電源のUSBコネクタを挿して電源ONしてBoot up!
起動途中で、国別/言語、キーボード設定、パスワード変更等の作業がありますが、サクサクと進めます。もし不明点があればネット検索で多くの情報にヒットするので、そちらを参考にすれば難なく解決できると思います。
デフォルトユーザ"Pi"にて自動ログインでデスクトップ画面が立ち上がってきます。
【Tips】
Raspberry Piへ給電するUSBケーブルの件です。
手持ちのUSBケーブル(microUSB-USB)で、最初に写真の黒い方のケーブルを使っていたところ、Raspberry Piから低電圧状態のアラームが出ました。
・POWERLED(赤色)が点滅(消灯)する。
・デスクトップに低電圧状態のアラーム(雷マーク)が表示される。
リブートしてみても、起動途中に途中で落ちる?ようなことも起こり、動作が不安定でした。
初めは原因がよく分からなかったのですが、白い方のケーブルがあったのでそちらを試すと、今度はアラームも出ないで安定的に上がってきました。
おそらくケーブルの太さの違いによる電力供給の差だろうと思います。
黒い方は見た目でも白い方より細いので、電圧降下が大きく給電が間に合わなかったと思います。
どんな場合でも『電源ラインは太く短く』が基本です。
3年前にRaspberry Pi3(MODEL B)に『Raspbian(ラズビアン)』をインストールして起動しましたね。
あれからもう3年ですかー、早いですね。。。
正直、その後あまり活用方法もなく、コロンっと机の端で埃を被っていたPi3ですが、この度、再起動させたいと思います。
と、思ったところでいろいろと変わっていました。
すでにPi4は発売され、OSも『Raspberry Pi OS』と名称が変わっていました。。。
RaspberryPiのサイトからRaspberry Pi OSをダウンロードします。
https://www.raspberrypi.org/
Raspberry Pi OS(以前はRaspbianと呼ばれていました)は、公式にサポートされているオペレーティングシステムです。
※英語サイトですが、google翻訳で表示しています。
画面にあるように、Raspberry Pi Imagerを使用してRaspberryPiOSをインストールします。
最初に、Raspberry Pi Imagerをダウンロードします。私はWindowsを使っているので、Windows版をダウンロードします。
これまでのNOOBS v2.4.5(2017.11.29)では1.5GBのファイルサイズがあり、ダウンロードにもそれなりの時間がかかっていましたが、imager_1.5(2020.12.29)では20MB弱なのですぐにダウンロードできます。
【Raspberry Pi Imager】
では、やってみましょう。
Raspberry Pi ImagerをPCにインストールします。インストール先は選択できないようです。
①microSDカードをPCに接続して、Raspberry Pi Imagerを実行します。
②OSを選択します。
③microSDカードを選択します。
④microSDカードに書き込みます。
大体15分弱くらいで、完了画面が出ました。
【Raspberry Piの起動】
①OSを書き込んだmicroSDカードをカードスロットに挿入
②キーボード、マウス、LANケーブル、HDMIケーブルをそれぞれ接続
③電源のUSBコネクタを挿して電源ONしてBoot up!
起動途中で、国別/言語、キーボード設定、パスワード変更等の作業がありますが、サクサクと進めます。もし不明点があればネット検索で多くの情報にヒットするので、そちらを参考にすれば難なく解決できると思います。
デフォルトユーザ"Pi"にて自動ログインでデスクトップ画面が立ち上がってきます。
【Tips】
Raspberry Piへ給電するUSBケーブルの件です。
手持ちのUSBケーブル(microUSB-USB)で、最初に写真の黒い方のケーブルを使っていたところ、Raspberry Piから低電圧状態のアラームが出ました。
・POWERLED(赤色)が点滅(消灯)する。
・デスクトップに低電圧状態のアラーム(雷マーク)が表示される。
リブートしてみても、起動途中に途中で落ちる?ようなことも起こり、動作が不安定でした。
初めは原因がよく分からなかったのですが、白い方のケーブルがあったのでそちらを試すと、今度はアラームも出ないで安定的に上がってきました。
おそらくケーブルの太さの違いによる電力供給の差だろうと思います。
黒い方は見た目でも白い方より細いので、電圧降下が大きく給電が間に合わなかったと思います。
どんな場合でも『電源ラインは太く短く』が基本です。
ArduinoでSDカード情報を取得する [Arduino]
(2021.1.1更新)
#とりあえず、上手くいかなかったことも後学のためと思い、掲載します。
#後日、解決したらタイトルも変えて、更新したいと思います。
(2021.1.9更新) Papilioシリーズ、中止しました
”Papilioでカメラ画像を転送する”シリーズをやっていますが、まぁまぁそんなにスムーズにいくわけもなく、いい感じで行き詰っております orz。。。
なかなか実績もないところもあり、Papilio or ZPUinoのどちらで間違えているか?切り分けもままならぬ状況なので、一旦、Arduinoで試してみようと思います。
ArduinoからSDカードへファイルを読み書きさせたいのですが、まず最初はタイトル通りにArduinoからSDカードの情報を取得してみたいと思います。
SDカードのIOは3.3Vで、Arduino UNOは5Vなのでそのままでは使えません。そのため今回はArduino Pro Mini(3.3V, 8MHz)を使います。
ArduinoとSDカードのやり取りはSPIというインターフェースで行われます。
SPIとは、。。。。。。。
ANALOGDEVICES社の技術資料ページのリンクを貼っておきます。
"https://www.analog.com/jp/analog-dialogue/articles/introduction-to-spi-interface.html#"
SDカードソケットを調達します。これ↓です。
SDカード配線引出基板
"https://akizukidenshi.com/catalog/g/gK-10967/"
DIP化されるのでブレッドボードで使用可能になります。
USBコネクタは電源供給用です(基板上で5V→3.3Vに変換)。
【配線図】
Arduino Pro Mini (pin) --- SDカード(基板)
SCK(13) CLK(CLK)
MISO(12) D0/DAT0(D0)
MOSI(11) DI/CMD(CMD)
SS(10) CS/CD/DAT3(D3)
【スケッチ】
最初にSDカード情報をコンソール画面に表示する、サンプルスケッチを試してみます。
Arduino IDEから
ファイル>スケッチ例>SD>CardInfo
スケッチのCS(SS)ピン番号を4→10に変更しています。
手元にあった512MBのSDカードを使って試してみましたが、動作がかなり不安定です。カード情報を取れたり、取れなかったり。
Arduino Pro Miniボードのリセットを何度か押して、コンソール画面に表示させます。
配線長とかも不安定の要素らしいので、出来るだけ短くした方が良いそうです。
とりあえずSDカードと認識しても”パーティションが無い!”とか不完全な感じです。
”Windows標準のフォーマットではなくてSDフォーマッターを使用してフォーマットした方が良い”とのネット記事も読んだので試してみましたが、状況は変わらないです。。。(FAT16 or FAT32でフォーマットしているんですけどね)
SDアソシエーション
"https://www.sdcard.org/jp/index.html"
その後、Arduino Pro Miniボードのリセットを連打しても、
Initializing SD card...initialization failed. Things to check:
* is a card inserted?
* is your wiring correct?
* did you change the chipSelect pin to match your shield or module?
のメッセージしか出ないですね。”配線を見直せ”と言われても4本しかないですからねー。
感覚的には20回に1回くらいでSDカードを認識するメッセージも出ますが、やっぱり"パーティションが無い"と言われて。。。
いずれにせよ、ちょっとこのままでは使い物にならないわけで、次の手を考えてみたいと思います。
=========================================================
(2021.1.1更新)
前回までの不安定動作が解消し、カード情報を取得することが出来たので更新します。
やったことは2つ、①電源強化と②パスコンの実装です。
①はこれまでもSDカードにアクセスした際に電圧降下も観測しなかったので”ちょっと違うかもしれない”とは思いつつ、電源周りを見直すことも一つの案として実施しました。
SDカード配線引出基板にはmicroUSB端子を利用して外部から5V電源を入力することが可能です。これまではArduino Pro Miniと同系統で3.3Vを供給していたため、電源ラインを分ける形にしました。
ただ結果的に、想定通りに問題解決策にはなりませんでした。
基板にmicroUSB端子を追加実装しています。
②パスコンの実装
電源とGNDの間に0.1μFのパスコンを実装しました(いわゆる、お守り代わりですが)。
実は前回もやって上手くいかなかったのですが、今回はブレッドボードに挿す感触が前回より強め?のような気がして。。。
結果、電源ラインもmicroUSB端子からこれまでと同様にArduino Pro Miniと同系統で3.3Vを供給しても安定動作して、パスコンが問題解決策になりました。
Arduino Pro Miniボードのリセットを押して、コンソール画面に表示させます。
(2021.1.9更新) Papilioシリーズ、中止しました
ArduinoからSDカードへファイルを読み書きさせたいのですが、まず最初はタイトル通りにArduinoからSDカードの情報を取得してみたいと思います。
SDカードのIOは3.3Vで、Arduino UNOは5Vなのでそのままでは使えません。そのため今回はArduino Pro Mini(3.3V, 8MHz)を使います。
ArduinoとSDカードのやり取りはSPIというインターフェースで行われます。
SPIとは、。。。。。。。
ANALOGDEVICES社の技術資料ページのリンクを貼っておきます。
"https://www.analog.com/jp/analog-dialogue/articles/introduction-to-spi-interface.html#"
SDカードソケットを調達します。これ↓です。
SDカード配線引出基板
"https://akizukidenshi.com/catalog/g/gK-10967/"
DIP化されるのでブレッドボードで使用可能になります。
USBコネクタは電源供給用です(基板上で5V→3.3Vに変換)。
【配線図】
Arduino Pro Mini (pin) --- SDカード(基板)
SCK(13) CLK(CLK)
MISO(12) D0/DAT0(D0)
MOSI(11) DI/CMD(CMD)
SS(10) CS/CD/DAT3(D3)
【スケッチ】
最初にSDカード情報をコンソール画面に表示する、サンプルスケッチを試してみます。
Arduino IDEから
ファイル>スケッチ例>SD>CardInfo
スケッチのCS(SS)ピン番号を4→10に変更しています。
/* SD card test This example shows how use the utility libraries on which the' SD library is based in order to get info about your SD card. Very useful for testing a card when you're not sure whether its working or not. The circuit: SD card attached to SPI bus as follows: >次のようにSPIバスに接続されたSDカード ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila >Arduino Uno / Duemilanove / Diecimilaのピン11 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila ** CS - depends on your SD card shield or module. >SDカードのシールドまたはモジュールによって異なります。 Pin 4 used here for consistency with other Arduino examples >他のArduinoの例との一貫性のためにここで使用されるピン4 created 28 Mar 2011 by Limor Fried modified 9 Apr 2012 by Tom Igoe */ /******************************************************************************* テスト用SDカード情報取得プログラム ++++++ note ++++++ ・Arduino Pro Mini用にSSピンを変更 ・SDカード情報をコンソール画面に表示するプログラム *******************************************************************************/ // include the SD library: #include#include // set up variables using the SD utility library functions: Sd2Card card; SdVolume volume; SdFile root; // change this to match your SD shield or module; // Arduino Ethernet shield: pin 4 // Adafruit SD shields and modules: pin 10 // Sparkfun SD shield: pin 8 // MKRZero SD: SDCARD_SS_PIN //const int chipSelect = 4; //↓変更 // Arduino Pro Mini: pin 10 const int chipSelect = 10; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.print("\nInitializing SD card..."); // we'll use the initialization code from the utility libraries // since we're just testing if the card is working! if (!card.init(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed. Things to check:"); Serial.println("* is a card inserted?"); Serial.println("* is your wiring correct?"); Serial.println("* did you change the chipSelect pin to match your shield or module?"); while (1); } else { Serial.println("Wiring is correct and a card is present."); } // print the type of card Serial.println(); Serial.print("Card type: "); switch (card.type()) { case SD_CARD_TYPE_SD1: Serial.println("SD1"); break; case SD_CARD_TYPE_SD2: Serial.println("SD2"); break; case SD_CARD_TYPE_SDHC: Serial.println("SDHC"); break; default: Serial.println("Unknown"); } // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32 if (!volume.init(card)) { Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card"); while (1); } Serial.print("Clusters: "); Serial.println(volume.clusterCount()); Serial.print("Blocks x Cluster: "); Serial.println(volume.blocksPerCluster()); Serial.print("Total Blocks: "); Serial.println(volume.blocksPerCluster() * volume.clusterCount()); Serial.println(); // print the type and size of the first FAT-type volume uint32_t volumesize; Serial.print("Volume type is: FAT"); Serial.println(volume.fatType(), DEC); volumesize = volume.blocksPerCluster(); // clusters are collections of blocks volumesize *= volume.clusterCount(); // we'll have a lot of clusters volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB) Serial.print("Volume size (Kb): "); Serial.println(volumesize); Serial.print("Volume size (Mb): "); volumesize /= 1024; Serial.println(volumesize); Serial.print("Volume size (Gb): "); Serial.println((float)volumesize / 1024.0); Serial.println("\nFiles found on the card (name, date and size in bytes): "); root.openRoot(volume); // list all files in the card with date and size root.ls(LS_R | LS_DATE | LS_SIZE); } void loop(void) { }
手元にあった512MBのSDカードを使って試してみましたが、動作がかなり不安定です。カード情報を取れたり、取れなかったり。
Arduino Pro Miniボードのリセットを何度か押して、コンソール画面に表示させます。
配線長とかも不安定の要素らしいので、出来るだけ短くした方が良いそうです。
とりあえずSDカードと認識しても”パーティションが無い!”とか不完全な感じです。
”Windows標準のフォーマットではなくてSDフォーマッターを使用してフォーマットした方が良い”とのネット記事も読んだので試してみましたが、状況は変わらないです。。。(FAT16 or FAT32でフォーマットしているんですけどね)
SDアソシエーション
"https://www.sdcard.org/jp/index.html"
その後、Arduino Pro Miniボードのリセットを連打しても、
Initializing SD card...initialization failed. Things to check:
* is a card inserted?
* is your wiring correct?
* did you change the chipSelect pin to match your shield or module?
のメッセージしか出ないですね。”配線を見直せ”と言われても4本しかないですからねー。
感覚的には20回に1回くらいでSDカードを認識するメッセージも出ますが、やっぱり"パーティションが無い"と言われて。。。
いずれにせよ、ちょっとこのままでは使い物にならないわけで、次の手を考えてみたいと思います。
=========================================================
(2021.1.1更新)
前回までの不安定動作が解消し、カード情報を取得することが出来たので更新します。
やったことは2つ、①電源強化と②パスコンの実装です。
①はこれまでもSDカードにアクセスした際に電圧降下も観測しなかったので”ちょっと違うかもしれない”とは思いつつ、電源周りを見直すことも一つの案として実施しました。
SDカード配線引出基板にはmicroUSB端子を利用して外部から5V電源を入力することが可能です。これまではArduino Pro Miniと同系統で3.3Vを供給していたため、電源ラインを分ける形にしました。
ただ結果的に、想定通りに問題解決策にはなりませんでした。
基板にmicroUSB端子を追加実装しています。
②パスコンの実装
電源とGNDの間に0.1μFのパスコンを実装しました(いわゆる、お守り代わりですが)。
実は前回もやって上手くいかなかったのですが、今回はブレッドボードに挿す感触が前回より強め?のような気がして。。。
結果、電源ラインもmicroUSB端子からこれまでと同様にArduino Pro Miniと同系統で3.3Vを供給しても安定動作して、パスコンが問題解決策になりました。
Arduino Pro Miniボードのリセットを押して、コンソール画面に表示させます。