Comments (1)
//Temperature Sensor DS18B20 with Display
//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2020-03-31 papa, extended by steve_cz Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------
// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER
#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
#include <MultiChannelDevice.h>
#include <DallasTemperature.h>
#include <U8g2lib.h>
U8X8_SSD1306_128X32_UNIVISION_SW_I2C u8x8(/* clock=A5*/ 19, /* data=A4*/ 18);
// we use a Pro Mini
// Arduino pin for the LED
// D5 == PIN 5 on Pro Mini
#define LED_PIN 4
// D4 == PIN 4 on Pro Mini
#define DS18B20_PIN 14
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8
//-----------------------------------------------------------------------------------------
//Korrektur von Temperatur und Luftfeuchte
//Einstellbarer OFFSET für Temperatur -> gemessene Temp +/- Offset = Angezeigte Temp.
#define OFFSETtemp 3 //z.B -50 ≙ -5°C / 50 ≙ +5°C
//Einstellbarer OFFSET für Luftfeuchte -> gemessene Luftf. +/- Offset = Angezeigte Luftf.
//#define OFFSEThumi 0 //z.B -10 ≙ -10%RF / 10 ≙ +10%RF
//-----------------------------------------------------------------------------------------
// number of available peers per channel
#define PEERS_PER_CHANNEL 6
//seconds between sending messages
#define MSG_INTERVAL 60 //300
// all library classes are placed in the namespace 'as'
using namespace as;
OneWire ourWire(DS18B20_PIN); // DS18B20_PIN
DallasTemperature sensors(&ourWire);
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
{0x34, 0x56, 0x83}, // Device ID
"CZET000003", // Device Serial
{0x00, 0x3f}, // Device Model
0x10, // Firmware Version
as::DeviceType::THSensor, // Device Type
{0x01, 0x00} // Info Bytes
};
/**
Configure the used hardware
*/
typedef AvrSPI<10, 11, 12, 13> SPIType;
typedef Radio<SPIType, 2> RadioType;
typedef StatusLed<LED_PIN> LedType; //LED_PIN
typedef AskSin<LedType, BatterySensor, RadioType> Hal;
Hal hal;
class WeatherEventMsg : public Message {
public:
void init(uint8_t msgcnt, int16_t temp, bool batlow) { //uint8_t humidity,
uint8_t t1 = (temp >> 8) & 0x7f;
uint8_t t2 = temp & 0xff;
if ( batlow ) {
t1 |= 0x80; // set bat low bit
}
Message::init(0xc, msgcnt, 0x70, BIDI | WKMEUP, t1, t2);
pload[0] = 0; //humidity;
}
};
class WeatherChannel : public Channel<Hal, List1, EmptyList, List4, PEERS_PER_CHANNEL, List0>, public Alarm { //PEERS_PER_CHANNEL
WeatherEventMsg msg;
int16_t temp;
// uint8_t humidity; //enable to use humidity with another sensor
uint16_t millis;
public:
WeatherChannel () : Channel(), Alarm(5), temp(0), millis(0) {} //, humidity(0)
virtual ~WeatherChannel () {}
// here we do the measurement
void measure () {
//DPRINT("Measure...\n");
sensors.requestTemperatures();
//float t = sensors.getTempCByIndex(0);
//humidity = 0;
temp = sensors.getTempCByIndex(0) * 10;
//DPRINT("T/H = " + String(temp+OFFSETtemp)+"/"+ String(humidity+OFFSEThumi) + "\n");
DPRINT("T/H = " + String(temp+OFFSETtemp)+"\n");
}
virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
uint8_t msgcnt = device().nextcount();
// reactivate for next measure
tick = delay();
clock.add(*this);
measure();
msg.init(msgcnt, temp + OFFSETtemp, device().battery().low()); //OFFSETtemp //, 0
if (msgcnt % 20 == 1) device().sendPeerEvent(msg, *this);
else device().broadcastEvent(msg, *this);
displayValue();
}
uint32_t delay () {
return seconds2ticks(MSG_INTERVAL); //MSG_INTERVAL
}
void setup(Device<Hal, List0>* dev, uint8_t number, uint16_t addr) {
Channel::setup(dev, number, addr);
sysclock.add(*this);
}
uint8_t status () const {
return 0;
}
uint8_t flags () const {
return 0;
}
void displayValue() {
//DPRINT("display Value...\n");
//u8x8.clearDisplay(); //enable this to clear display after each measurement
char textArr[10];
dtostrf((temp + OFFSETtemp) / 10.0, 4, 1, textArr);
u8x8.draw2x2String(0, 2, textArr);
}
};
typedef MultiChannelDevice<Hal, WeatherChannel, 1> WeatherType;
WeatherType sdev(devinfo, 0x20);
ConfigButton<WeatherType> cfgBtn(sdev);
void initI2cDisplay() {
u8x8.begin();
u8x8.setFont(u8x8_font_pressstart2p_f);
u8x8.drawString(0, 0, "Temperatur");
u8x8.draw2x2UTF8(12, 2, "°C");
}
void setup () {
DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
sensors.begin();
sdev.init(hal);
hal.initBattery(60UL * 60, 22, 19);
buttonISR(cfgBtn, CONFIG_BUTTON_PIN); //CONFIG_BUTTON_PIN
sdev.initDone();
//Display
initI2cDisplay();
}
void loop() {
bool worked = hal.runready();
bool poll = sdev.pollRadio();
if ( !worked && !poll ) {
hal.activity.savePower<Idle<>>(hal);//Sleep
}
}
from asksinpp-web.
Related Issues (17)
- Einheit des Kondensators ist 12pf (picofarad) HOT 2
- HM Bell für AskSinPP Projektgalerie HOT 1
- Schellenberg Rollladen Gurtwickler mit AskSinPP steuern HOT 2
- Aufnahme Sketch HB-UNI-Sen-LEV-TOF
- Leichtere Modifikation vom 5V-BME280 HOT 3
- Erweiterung der Doku zu Device-Model HOT 1
- Aufnahme LED-Teelicht unter "Projekte" HOT 1
- Fulltext-Search
- HM-WDS40-TH-I-DHT22 Verknüpfung nur mit einem Thermostat möglich HOT 7
- Projekte/jan/HM-SEC-MDIR/README.md HOT 2
- Projekt 'HomeMatic Gardena 9V Ventil' HOT 2
- Projekte nach Datum sortieren / new Flag
- Lichtsensor auf Basis MAX44009 HOT 4
- HB-IBUT-8 für Alarmanlage
- HB-UNI-Sen-CURRENT vermisst HOT 1
- Sketch für MQ131
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from asksinpp-web.