MySensors

Jeg har i lang tid kigget efter et frame-work til at konsolidere mine sensorer. I mange år har jeg brugt Raspberry Pi til at monitorere temperaturen i vores gulv-varme system som jeg har beskrevet i Raspberry Pi and Onewire Temperature Sensors.

Et af kravene til et nyt sensor-framework er at det skal supportere batteri drevne sensorer som skal kunne køre i mindst et år uden at der skal skiftes batteri, så Raspberry Pi og andre Wifi baserede løsninger er for tunge.

MySensors is an open source hardware and software community focusing on do-it-yourself home automation and Internet of Things. We’re here to help people who’d like to create original and affordable sensors and actuators based on components like, Arduino, ESP8266, Raspberry Pi, NRF24L01+ and RFM69.

Nu har fundet hvad jeg søger nemlig MySensors, det er Arduino baseret og kan bl.a. bruge nrf24l01 til kommunikationen.  For at evaluere om det nu er noget der kan bruges, har jeg lavet et lille selvconfigurende netværk alene ved at kopiere et par af deres sensorer.

Jeg er ikke meget for klik-programering, da jeg aldrig kan huske hvor ting er/var og jeg gider altså ikke bare prøve mig frem så hellere dokumentere det en gang for alle i en Makefile, så det har jeg gjort.  Så kan jeg hurtigt finde ud hvad jeg har lavet når jeg kommer tilbage til projektet næste år.

Klikfri Arduino programering

I de tidlige Arduino dage var der forskellige Makefiles man kunne tilpasse, man skulle manuelt konfigurere hvilke libraries der blev brugt, og når der så kom en ny version af arduino, eller man flyttede fra Mac til Linux var der altid lige noget der skulle rettes til, eller nogle libraries der manglede – det var noget rod.

Med en moderne Arduino (1.8.5) kan man compilere arduino sketches med arduino_builder, og denne kommando kan man jo bruge fra Makefiles og dermed helt undgå arduino-GUI.

Nedenstående Makefile kan klare det meste inklusiv at hente alle tools/libraries/sources  kompilere og flashe koden til Arduino.

# (c) peter@lorenzen.us 2018 - beerware license
# Get and install everything around MySensors
# I do not like click-i-li-click set up - hence this Makefile
# all sketches is placed in seperate dirs under "sketches"
BASE=sketches
$(warning SKETCH=$(SKETCH))
ifdef SKETCH
SKETCHES=$(SKETCH)
else
SKETCHES=$(patsubst $(BASE)/%,%, $(wildcard $(BASE)/*))
endif

TTY=/dev/ttyUSB0
CPU=atmega328p
#BOARD=arduino:avr:mega:cpu=atmega2560
BOARD=arduino:avr:uno:cpu=$(CPU)
ARDUINO_HOME=arduino-1.8.5-$(shell arch)

ifeq ($V,99)
$(warning VERBOSE)
ARDUINO_OPTIONS += -verbose
endif
ARDUINO_OPTIONS += -hardware $(ARDUINO_HOME)/hardware
ARDUINO_OPTIONS += -tools $(ARDUINO_HOME)/hardware/tools/avr
ARDUINO_OPTIONS += -tools $(ARDUINO_HOME)/tools-builder
ARDUINO_OPTIONS += -libraries $(ARDUINO_HOME)/libraries
ARDUINO_OPTIONS += -libraries .
ARDUINO_OPTIONS += -libraries MySensorsArduinoExamples/libraries
ARDUINO_OPTIONS += -fqbn $(BOARD)
ARDUINO_BUILDER=$(ARDUINO_HOME)/arduino-builder $(ARDUINO_OPTIONS)
BUILD_DIR=arduino_build

all: MySensors MySensorsArduinoExamples $(ARDUINO_HOME) $(SKETCHES)

$(ARDUINO_HOME):
        @echo "== I do not know how to do scriptet download from arduino.cc"
        @echo "= Please download, extract and move to $@, to support sharing to multiple architectures\n"
        @false

MySensors: 
        git clone https://github.com/mysensors/MySensors.git

MySensorsArduinoExamples:
        git clone https://github.com/mysensors/MySensorsArduinoExamples.git

gui:
        # Start the Arduino GUI, note: config in ~/.arduino15/preferences.txt 
        $(ARDUINO_HOME)/arduino &

ifdef SKETCH
ARDUINO_OPTIONS += -build-path $(BUILD_DIR)/$(SKETCH) -compile $(BASE)/$(1)/$(1).ino
build: $(BUILD_DIR)/$(SKETCH)/$(SKETCH).ino.hex

flash: $(BUILD_DIR)/$(SKETCH)/$(SKETCH).ino.hex
        avrdude -v -p$(CPU) -carduino -P$(TTY)  -b115200 -D -Uflash:w:$<:i
endif

sizes:
        avr-size $(BUILD_DIR)/*/*.elf 2>&1 | sed -e 's,ardui.*/,,' -e 's,.ino.elf,,'

############ Sketches to be flashed to arduino
# To use a ready made sketch, link to it from sketches
# to make your own create a diretory under sketches and start coding.
#
# Compile and program chip:
# make DallasTemperatureSensor
# make SKETCH=DallasTemperatureSensor flash

define rule_sketch
$(1) $(BASE)/$(1): $(BUILD_DIR)/$(1)/$(1).ino.hex

$(BUILD_DIR)/$(1)/$(1).ino.hex: $(wildcard $(BASE)/$(1)/*)
        mkdir -p $(BUILD_DIR)/$(1)
        $(ARDUINO_BUILDER) -build-path $(BUILD_DIR)/$(1) -compile $(BASE)/$(1)/$(1).ino

endef

$(foreach s,$(SKETCHES),$(eval $(call rule_sketch,$(s))))

Jeg har endnu ikke skrevet nogen kode selv  blot bygget et par enhedder som beskrevet på MySensor home-page. og linket til dem, make vil compilere dem alle sammen, ligesom make også kan flashe koden til enheden se kommentar i Makefile ovenfor

peter@y:MySensors> ls -l sketches/
total 4
lrwxrwxrwx 1 peter peter 60 Apr 19 13:27 DallasTemperatureSensor -> ../MySensorsArduinoExamples/examples/DallasTemperatureSensor
lrwxrwxrwx 1 peter peter 68 Apr 19 12:59 DhtTemperatureAndHumiditySensor -> ../MySensorsArduinoExamples/examples/DhtTemperatureAndHumiditySensor
lrwxrwxrwx 1 peter peter 35 Apr 19 13:27 GatewaySerial -> ../MySensors/examples/GatewaySerial
lrwxrwxrwx 1 peter peter 34 Apr 19 16:52 MotionSensor -> ../MySensors/examples/MotionSensor
lrwxrwxrwx 1 peter peter 63 Apr 19 10:57 RealTimeClockDisplaySensor -> ../MySensorsArduinoExamples/examples/RealTimeClockDisplaySensor
peter@y:MySensors>

Jeg er allerede i luften med et lille trådløst selvkonfigurerende netværk som MyController præsenterer således, der er 5 stationer med termotre og PIR-sensorer.  Det er ganske imponerende hvad man kan få i luften med meget lille indsats.

Næste gang vil jeg lave en lille enhed selv, og dokumentere processen

This entry was posted in Arduino, HomeAutomation. Bookmark the permalink.