いつもお世話になります。よろしくお願いいたします。
奇妙な症状が出て、苦慮しています。
設備シーケンサーとRS-232C経由でラズベリーパイ3と接続してデータを取得し、データベースへ登録するプログラムをPythonで書き、動かし始めました。
プログラム自体は問題なく動作していますので次のステップとしてラズパイが再起動したときに、かのプログラムを自動起動させるように設定しようとしていますがそこでエラー(read failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?))が発生します。
ラズパイの設定から説明いたします。(GPIOピンの8番と10番を使います)
(1). ブルートゥースを無効化
/boot/condif.txt
にdtoverlay=pi3-miniuart-btを追加する
(2).以下のファイルを修正する
/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
(3).コンソールのシリアル通信を無効にする
sudo raspi-configを実行
5 Interfacing Optionsを選択する
P6 Serialを選択
『Would you like a login shell to be accessible over serial?』に『いいえ』を選択
『Would you like the serial port hardware to be enabled?』に『はい』を選択
(4).サービス停止
$ sudo systemctl stop serial-getty@ttyAMA0.service
$ sudo systemctl disable serial-getty@ttyAMA0.service
(5).getdataserial.pyというプログラムを作成し、問題なく動作することを確認
(6).デスクトップにgetdata.shというファイルを作成し、実行権を付与
内容は以下の通り
#!/bin/bash sudo python3 /home/pi/PyPrg/getdataserial.py
これでgetdata.shをダブルクリックし、『端末で実行』をクリックするとPythonのプログラムは問題なく動きます。
次に自動起動の設定ですが/home/pi/にユーザー権限でautostartというフォルダーを作成、autostartフォルダーにルート権限でgetdata.desktopというファイルを作成しました。ファイルの内容は以下の通りです。
[Desktop Entry] Name=getdataserial Exec=lxterminal -e "/home/pi/Desktop/getdata.sh" Type=Application
これでラズパイを再起動するとターミナルが開き、プログラムは動作するのですがread failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?)というエラーが発生します。getdataserial.pyはエラーが起きてもループするようにしてあって、ターミナルを見ているとたまにまとものなデータを返す時もありますがほとんどはread failed:以下のエラーを返します。
しょうがないので.config/autostart内のdesktopファイルを削除して再起動し、デスクトップのgetdata.shを実行すると問題なく動作します。
デバイス関係のファイルなどの読込タイミングが影響しているのでしょうか、困っています。
ちなみにDHT11という温湿度センサーを使ったPythonプログラムを同じような設定で自動起動させるとこちらは問題なく動きました。
自動起動につきましてはhttp://hendigi.karaage.xyz/2016/11/auto-boot/を参考にさせていただき、とりあえず/etc/init.dを除く全部を試してみて唯一動いた(表示された)今回の方法を選択した次第です。
ヒントなど頂けましたら助かります。よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。