มาตรวัดฝนที่ให้ทิปง่าย ๆ เชื่อมต่อผ่าน LoRawan ™ อุปกรณ์นับจำนวนครั้งที่ปลายถัง/ปั่นป่วนและส่งค่าโดยใช้ Lorawan ™
แอปพลิเคชันตัวรับสัญญาณสามารถคำนวณปริมาณน้ำฝนและหากจำเป็นต้องรีเซ็ตตัวนับ
การคำนวณปริมาณน้ำฝนได้รับแรงบันดาลใจจากคำสั่ง Arduino-Rain-Gauge-Calibration
ใช้มาตรวัดปริมาณฝนที่มีขนาด 11 ซม. โดย 5 ซม. ตามลำดับโดยให้พื้นที่เก็บกักเก็บน้ำ 55 ซม. ² คอลเล็กชั่นฝน 10 มิลลิลิตรคือ 10 มล./55 ซม. ² = 0.181818182 ซม. = 1.81818182 มม. ของฝน
ในมาตรวัดปริมาณฝนที่ให้ทิป, เคล็ดลับถัง/tumbles 5 ครั้งสำหรับ 10 มล. (หรือ 1.81 มม. ของฝน) และดังนั้นเคล็ดลับเดียวสำหรับ (10/5) มล. = 2ml (หรือ 0,364636364 มม.)

พินที่จำเป็นทั้งหมดของพิน RFM95 อยู่บนขนที่เชื่อมต่อโดยตรงกับพินบน 32U4 ยกเว้น RFM95 DIO1 สำหรับ RFM95 DIO1 คือ Arduino Pin 1 ที่เลือกเนื่องจากเป็นอินเตอร์รัปต์ภายนอก #3 และยังอยู่ถัดจาก DIO1 บนขนนก Adafruit Feather 32U4 RFM95 PIN Mapping
ถังให้ทิปต้องการสองพินบนขนนก GND และอินพุต เป็นพินอินพุตคือ Arduino Pin 3 (Interrupt ภายนอก 0) ที่เลือก
จำเป็นต้องเปิดใช้งานการดึงขึ้นที่อ่อนแอสำหรับ Arduino Pin 3 ดังนั้นเมื่อมีการตรวจพบ Tipping Bucket Tips/Tumbles สัญญาณต่ำสามารถตรวจพบได้
Platformio โดยใช้ Adafruit Feather 32U4 Platformio Board เป็นฐาน ห้องสมุด Arduino-LMIC ให้การสนับสนุน Lorawan ™
เฟิร์มแวร์นับจำนวนเคล็ดลับ/tumbles ที่ทำโดยถังให้ทิปและส่งโดยใช้ LoRawan ™ ในข้อความยังเป็นระดับแรงดันไฟฟ้าของแบตเตอรี่ที่รายงาน
ในระหว่างการเข้าร่วม Lorawan ลำดับ LED จะจางหายไป คลาส Fade ถูกสร้างขึ้นจากตัวอย่าง LED ของ Arduino Fading
การประหยัดพลังงานทำได้ในสองรัฐหลัก โหมดฝนตกและไม่มีโหมดฝน
โหมดที่สามตั้งค่าอุปกรณ์ในโหมด Sleep_orever โดยไม่เปิดใช้งานการขัดจังหวะหากแรงดันไฟฟ้าของแบตเตอรี่ต่ำกว่า 3.5 v. นี่คือการบันทึกแบตเตอรี่จากการถูกทำลายโดยการปล่อย
การนอนหลับจะทำในช่วงเวลา 8 วินาทีและหลังจากการนอนหลับ 8 วินาทีเครื่อง LMIC สถานะจะถูกตรวจสอบและข้อมูลหากมีการส่งข้อมูลเวลา
ระยะเวลาการส่งข้อมูลเริ่มต้นคือ 15 วินาที
หากไม่มีการตรวจพบฝนเป็นเวลาประมาณหนึ่งชั่วโมงอุปกรณ์จะตั้งค่าโหมดสลีป sleep_forever และรอในครั้งต่อไปที่ฝนตกดังนั้นการขัดจังหวะภายนอกจะตื่นขึ้นมาอุปกรณ์
เมื่ออุปกรณ์ตื่นขึ้นมาข้อความจะถูกส่งไปเรียกคำสั่งใด ๆ ที่เข้ามา
เพื่อลดความซับซ้อนของการรวมเข้ากับเครือข่ายตัวถอดรหัสและตัวเข้ารหัสสามารถใช้เพื่อทำให้การใช้งาน MQTT API ง่ายขึ้น
คำสั่ง MQTT เพื่อรีเซ็ตตัวนับฝนในอุปกรณ์ การรีเซ็ต พารามิเตอร์จะมีค่า 234 (0xea) สำหรับคำสั่งรีเซ็ตที่จะได้รับการยอมรับจากอุปกรณ์
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"reset":234}} 'คำสั่ง MQTT เพื่อตั้งค่าช่วงเวลาการส่งเป็น 15 นาที
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"multiplexer":15}} ' function Decoder ( bytes , port )
{
// Decode an uplink message from a buffer
// (array) of bytes to an object of fields.
var decoded = { } ;
if ( port === 1 )
{
if ( bytes . length >= 3 )
{
decoded . counts = ( ( ( bytes [ 2 ] & 0x80 ) >> 7 ) << 16 ) | ( bytes [ 1 ] << 8 ) | bytes [ 0 ] ;
decoded . vbat = ( ( bytes [ 2 ] & 0x7F ) + 330 ) / 100.0 ;
}
}
return decoded ;
} function Encoder ( object , port ) {
// Encode downlink messages sent as
// object to an array or buffer of bytes.
var bytes = [ ] ;
if ( port === 1 && ( ( object . multiplexer > 0 ) && ( object . multiplexer < 255 ) ) )
{
bytes [ 0 ] = 1 ;
bytes [ 1 ] = object . multiplexer ;
}
else if ( port === 2 && object . reset === 0xea )
{
bytes [ 0 ] = object . reset ;
}
return bytes ;
}