mbedに1-Wire温度センサDS18B20を接続してデジタル温度計を試作してみた。(奥に見えている白いのはDHT22で今回の試作には関係ありません)
うっかりしていたが、寄生電力モード(parasitic mode)で動かすときにはプルアップ抵抗4.7KΩでは大きい、2.2KΩにしたら動いた。
mbedではOneWireCRCにHTTPClientを追加して温度データを一定間隔でGAEにアップロードしています。
ケータイからメールリクエストで温度データを読み取ります。
以下はGAE側で動かしているソフトウェアです。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# gae_ds18b20.py 2011.9.17
import datetime
from google.appengine.api import app_identity
from google.appengine.api import mail
from google.appengine.ext import webapp
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
class ds18b20(db.Model):
realTemp = db.FloatProperty()
created = db.DateTimeProperty(auto_now_add=True)
@property
def created_jst(self): # 日本時間(テンプレートエンジン用)
return self.created + datetime.timedelta(hours=9)
class ApiHandler(webapp.RequestHandler):
def get(self, realTemp):
data = ds18b20()
data.realTemp = float(realTemp);
data.put()
self.response.out.write("RealTemp: %s" % realTemp)
class EmailHandler(InboundMailHandler):
def receive(self, mail_message):
message = mail.EmailMessage()
message.sender = "ds18b20@" + app_identity.get_application_id() + ".appspotmail.com"
message.to = mail_message.sender
message.subject = u"DS18B20"
query = ds18b20.all()
data = query.order("-created").get()
message.body = u"RealTemp: %f" % data.realTemp
message.send()
application = webapp.WSGIApplication([
('/ds18b20/api/(.+)', ApiHandler),
EmailHandler.mapping(),
], debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
(2011/9/18)
---
2 件のコメント:
こんにちわ。
自分はPythonがわからないんですが、JavaのGAEを使います。
データの送信はどのように行なっているんですか?
メール(SMTP)でしょうか?
自分もやってみたいと思ったので…
GAEからはメールの送信を使っています。
http://code.google.com/intl/ja/appengine/docs/python/mail/sendingmail.html
JavaならJavaMailでのメール送信
http://code.google.com/intl/ja/appengine/docs/java/mail/usingjavamail.html
が該当すると思うですが…。
コメントを投稿