| @@ -0,0 +1,67 @@ | |||||
| LoRa Irrigation System | |||||
| ====================== | |||||
| This project is to build an irrigation system from LoRa capable | |||||
| microcontrollers. The [Heltec Node151](https://heltec.org/project/lora-node-151/) | |||||
| was chosen due to it's small size and inexpensive cost. | |||||
| Design Decisions | |||||
| ---------------- | |||||
| While investigating this, the LoraWAN protocol was investigated, but | |||||
| after looking at the code complexity and other operational requirements, | |||||
| if was decided that for this project, it was safer to target a direct | |||||
| Node to Node style communication system. This would allow the | |||||
| implementation to be more simple, and security to be built in. It | |||||
| could also be used for other projects that need security. | |||||
| One of the other requirements is that the code be 100% open sourced, | |||||
| not GPL licensed, and no propietary components. This ment that using | |||||
| IDE's like ST's STM32CubeIDE which is only available in binary form | |||||
| was not a choice, as that would preclude building on an operating | |||||
| system other than Windows/MaxOS/Linux. | |||||
| Building | |||||
| -------- | |||||
| The build system uses the BSD flavor of make. This is the default | |||||
| make on the BSDs, originally called pmake, but also available as bsdmake | |||||
| for MacOSX, and likely other operating systems as well. | |||||
| It also depends upon ARM's [GNU Arm Embedded | |||||
| Toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) | |||||
| which uses gcc as the compiler. It would be good to get it to | |||||
| cross-compile with clang as well, but that requires finding a libc like | |||||
| the nano libc that `nano.specs` in the above toolchain provides. | |||||
| Once ARM's toolchain is in your path, the following should work: | |||||
| ``` | |||||
| export MAKEOBJDIR=build | |||||
| mkdir $MAKEOBJDIR | |||||
| bsdmake all | |||||
| ``` | |||||
| And in the directory `build`, a file `lora.irr.elf` should be pressent. | |||||
| Flashing | |||||
| -------- | |||||
| Flashing can be done via the open source tool | |||||
| [OpenOCD](https://sourceforge.net/projects/openocd/). For this, I use | |||||
| a Digilent HS1 JTAG programmer utilizing the [resistor | |||||
| hack](https://github.com/ntfreak/openocd/blob/master/tcl/interface/ftdi/swd-resistor-hack.cfg) | |||||
| to allow an FTDI JTAG programmer to control the bi-directional `SWIO` | |||||
| pin. | |||||
| One caveat w/ MacOSX, is that it may be necessary to unload the kext | |||||
| `com.apple.driver.AppleUSBFTDI` via the command: | |||||
| ``` | |||||
| sudo kextunload -b com.apple.driver.AppleUSBFTDI | |||||
| ``` | |||||
| as OpenOCD wants direct access to the FTDI driver. | |||||
| Once that happens, the device can be programmed using the following | |||||
| command: | |||||
| ``` | |||||
| sudo openocd -f interface/ftdi/digilent-hs1.cfg -f interface/ftdi/swd-resistor-hack.cfg -f target/stm32l1.cfg -c "init" -c "reset init" -c "program build/lora.irr.elf verify reset exit" | |||||
| ``` | |||||