ラベル DS18B20 の投稿を表示しています。 すべての投稿を表示
ラベル DS18B20 の投稿を表示しています。 すべての投稿を表示

2015年8月31日月曜日

DS18B20動作確認用プログラムのLPC812対応



DS18B20動作確認用プログラムは mbed LPC812では動かなくなってしまった。

以前のwait_us関数はSCTで実装されていたのでone wireパラメータを調整してなんとか動いていました。

最近のmbedライブラリではMRTでwait_us関数を実装しているのでus単位をシステムクロックに変換する演算に時間がかかって立ち上がりが遅くなって、とうとう動かなくなってしまったようです。

予めシステムクロック単位に変換しておいてwait関数を軽くするように変更しました。
MRTのTIMER3を使っているので競合に注意。

https://developer.mbed.org/users/va009039/code/DS18B20_test/

(2015/8/31)
---

2013年1月4日金曜日

DS18B20動作確認用プログラム

DS18B20の動作確認用のプログラムです。
OneWireCRCを含めて多くのライブラリが公開されていますが、
DS18B20を壊していないのか確認したかったので、既に公開されているTempMeasureのone_wire.cppが簡潔でわかりやすいので利用しました。

DS18B20_test

(2013/1/4)
---

2011年9月18日日曜日

DS18B20とmbedでデジタル温度計を試作(1)


mbed1-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)
---