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.
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
You must be logged in to post a comment.