質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1599閲覧

ラズベリーパイの入力状態をリアルタイムでブラウザに表示する方法につきまして

crpmanz

総合スコア5

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/11/10 04:04

編集2021/11/10 04:09

イメージ説明

【成功した事】
ラズベリーパイ4のGPIOで特定のピンをINPUTに設定し、
入力があったら(電流が流れたら)ブラウザにONと表示する。
そして電流をOFFにしてから更新ボタンを押すとブラウザの文字がOFFと表示される
(Supernoveさん、前回はご回答くださりありがとうございました)

【実現させたい事】
更新ボタンを押さずに(画面遷移させずに)
入力あり→ブラウザにON表示
入力なし→ブラウザにOFF表示
とリアルタイムで出来るような仕組みを作りたいと思っています。

【試した事】
どのような方法があるのか自分なりで調べてみたところ、
具体的な内容は無かったのですが、ajaxを使ってみては?というような記事がありました。
今回の様なことをする場合は皆さんは一般的にどのような感じで実行されるのでしょうか。
ヒントや参考ページ等でも構いませんので、アドバイスを頂けますと幸いです。
ブラウザのボタンからLEDのON・OFF(Lチカ)の記事は多いのですが、
その逆のINPUT時にブラウザに文字を出力となると急に情報が減ってしまいます。
引き続き自分なりにも調べてみたいと思いますが、
申し訳ありません、ご存じの方いらっしゃいましたらアドバイスの程お願い致します。

【Python部分】

-- coding: utf-8 --

from flask import Flask, render_template
import RPi.GPIO as GPIO
import time

app = Flask(name)

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

@app.route('/')
def index():
if GPIO.input(17) == GPIO.HIGH:
text = 'ON'
else:
text = 'OFF'
return render_template('index.html',message=test)

if name == 'main':
try:
app.run("0.0.0.0", debug=True)
except:
GPIO.cleanup()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Supernove

2021/11/11 16:51

すみませんが、ソースコードが見づらいので、MarkdownのCodeタグを使ってほしいです
guest

回答2

0

前回回答しましたが、多分この質問来るだろうなとおもってましたw
前回のソースコードをそのまま使うのであれば、ajaxを使わなくてもindex.htmlに1秒間隔でJavaScriptでページをリロードするlocation.reload()を実行するようにすればこれまた力技ですがユーザーがリロードをしなくても動くと思います。

HTML

1<html> 2 <head> 3 <title>Input Status</title> 4 </head> 5 <body> 6 {{ message }} 7 </body> 8</html> 9<script> 10 setInterval("location.reload()", 1000); 11</script>

とりあえず動かすだけであれば上記のようにHTMLを書けばいいはずですが、もし今後他のインプットも表示するのであればTakaiYさんが回答されたようにサーバーのコードも改修して拡張性を上げる必要があります。

投稿2021/11/11 17:19

Supernove

総合スコア1154

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ajaxを使います。

ブラウザ側では、javascriptで定期的(1秒ごととか)にAPIをたたきます。
方法はここで書くと長くなるし、webに情報がたくさんあるのでそちらを参照ください。 検索してみつけたやつを例にあげておきます。

サーバ側はたたかれるAPIを実装しておきます。なんとなくこんな感じでしょうか。

python

1@app.route('/led-status', methods=['GET']) 2def get_led_status(): 3 4 led_status = {} 5 if GPIO.input(17) == GPIO.HIGH: 6 led_status["GPID17"] = "ON" 7 else: 8 led_status["GPIO17"] = "OFF" 9 10 return flask.jsonify(led_status) 11

関数では、led_status という変数を作って、状況に応じた値を設定したあと、jsonにして返しています。
この処理を API /led-status に設定しています。

jsonにしておけば、処理結果や、他のGPIOの結果も合せて乗せるなどがやりやすいですね。

投稿2021/11/10 04:58

TakaiY

総合スコア13790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

crpmanz

2021/11/24 12:03

ご回答くださりましてありがとうございます。 教わった事を調べながら苦戦しながら色々と頑張ってみたいと思います。 アドバイス・ご提案とても感謝致します。 本当にどうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問