###前提・実現したいこと
Raspberry piにセンサーを接続させて、天気予報を喋らせるというプログラムを実行したいのですがエラーがでて実行できませんでした。
センサーを接続させ、感知するとLEDを点灯させることはできましたが、天気予報のプログラムにセンサー感知のプログラムを組み込み方が理解できませんでした。
センサー検知でLEDつけるコードと喋るコードの組み合わせを教えていただきたいです。
###発生している問題・エラーメッセージ
Traceback (most recent call last): File "tenki5", line 5, in <module> import commands ImportError: No module named 'commands'
###該当のソースコード
#!/usr/bin/env python # -*- conding:utf-8 -*- from __future__ import print_function import socket import commands import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(3, GPIO.IN) from contextlib import closing import shlex import subprocess from datetime import datetime try: import urllib.request as urllib2 except ImportError: import urllib2 import json CMD_SAY = 'jsay' def main(): say_datetime() say_weather() while True: inputValue = GPIO.input(3) if (inputValue == True): say_weather() time.sleep(10) return def say_datetime(): d = datetime.now() text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second) text = CMD_SAY + ' ' + text print(text) proc = subprocess.Popen(shlex.split(text)) proc.communicate() return def say_weather(): city = '200010'; # Tokyo 他の地域の方は、番号を変えてください。 json_url = 'http://weather.livedoor.com/forecast/webservice/json/v1' #API URL weather_text = u'%sの天気は%sです。' temperature_text = u'%sの予想最高気温、%s度、予想最低気温、%s度です。' try: r = urllib2.urlopen('%s?city=%s' % (json_url, city) ) jsonStr = r.read().decode('utf-8') print(jsonStr) obj = json.loads( jsonStr ) print(obj) title = obj['title'] forecasts = obj['forecasts'] # TODAY cast = forecasts[0] temperature = cast['temperature'] today_w_txt = weather_text % (cast['dateLabel'], cast['telop']) # 最高、最低気温を取得。データが存在しない場合もある temp_max = "" temp_min = "" if temperature['max'] is not None: temp_max = temperature['max']['celsius'] if temperature['min'] is not None: temp_max = temperature['min']['celsius'] today_t_txt = temperature_text % (cast['dateLabel'], temp_max, temp_min) # TOMMOROW cast = forecasts[1] temperature = cast['temperature'] tommorow_w_txt = weather_text % (cast['dateLabel'], cast['telop']) # SAY weather_str = title + ' ' + today_w_txt + ' ' + today_t_txt + ' ' + tommorow_w_txt text = '''%s '%s' ''' % (CMD_SAY, weather_str) print(text) proc = subprocess.Popen(shlex.split(text)) proc.communicate() finally: r.close() return ### Execute if __name__ == "__main__": main()
####元のソースコード(天気予報を喋るソースコード)
#!/usr/bin/env python # -*- conding:utf-8 -*- import shlex import subprocess from datetime import datetime try: import urllib.request as urllib2 except ImportError: import urllib2 import json CMD_SAY = 'jsay' def main(): say_datetime() say_weather() return def say_datetime(): d = datetime.now() text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second) text = CMD_SAY + ' ' + text print(text) proc = subprocess.Popen(shlex.split(text)) proc.communicate() return def say_weather(): city = '130010'; # Tokyo 他の地域の方は、番号を変えてください。 json_url = 'http://weather.livedoor.com/forecast/webservice/json/v1' #API URL weather_text = u'%sの天気は%sです。' temperature_text = u'%sの予想最高気温、%s度、予想最低気温、%s度です。' try: r = urllib2.urlopen('%s?city=%s' % (json_url, city) ) jsonStr = unicode(r.read()) print(jsonStr) # 確認表示 obj = json.loads( jsonStr ) print(obj) # 確認表示 title = obj['title'] forecasts = obj['forecasts'] # TODAY cast = forecasts[0] temperature = cast['temperature'] today_w_txt = weather_text % (cast['dateLabel'], cast['telop']) # 最高、最低気温を取得。データが存在しない場合もある temp_max = "" temp_min = "" if temperature['max'] is not None: temp_max = temperature['max']['celsius'] if temperature['min'] is not None: temp_max = temperature['min']['celsius'] today_t_txt = temperature_text % (cast['dateLabel'], temp_max, temp_min) # TOMMOROW cast = forecasts[1] temperature = cast['temperature'] tommorow_w_txt = weather_text % (cast['dateLabel'], cast['telop']) # SAY weather_str = title + ' ' + today_w_txt + ' ' + today_t_txt + ' ' + tommorow_w_txt text = '''%s '%s' ''' % (CMD_SAY, weather_str) print(text) proc = subprocess.Popen(shlex.split(text)) proc.communicate() finally: r.close() return ### Execute if __name__ == "__main__": main()
####センサー検知でLEDをつけるソースコード
import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) GPIO.setup(3, GPIO.IN) try: while True: if GPIO.input(3) == GPIO.LOW: GPIO.output(4, GPIO.HIGH) else: GPIO.output(4, GPIO.LOW) except KeyboardInterrupt: pass GPIO.cleanup()
###試したこと
リンク内容
上記のサイトを参考にしてプログラムを追加してみました。
また、ほかのサイトのプログラムを実行してみたところ「import error no module named RPi」というエラーも出てきてしまい手詰まりでした。
エラーについて検索してみましたが、手がかりになるようなものがなかなか見つからなかったのでこちらに質問させていただきました。
お力をお貸しいただけると幸いです。
###追記
import commandsを削除したところ別のエラーが発生しました。
$sudo python ファイル名 で実行しています。
File line55 SyntaxErorr: Non-ASCII character '\xe' in file tenki5 on line 55, but no encoding declead; see http://pyton.org/dev/peps/pep-0263/ for details
天気予報を喋るコードとセンサー感知のコードを組み合わせるにはどうするべきだったのでしょうか。自作したソースコードが大幅に変更してもよいので教えて頂きたいです。
回答4件
あなたの回答
tips
プレビュー