Skip to content

Instantly share code, notes, and snippets.

View kikermo's full-sized avatar

Enrique Ramirez kikermo

  • London
View GitHub Profile
@kikermo
kikermo / blegreenhouse.ino
Created September 2, 2019 00:28
BLE configuration for greenhouse project
#include <bluefruit.h>
// BLE
#define TX_POWER (4) // Transmission power in dBm (check bluefruit.h)
#define ENVIROMENTAL_SERVICE_UUID (0x181A)
#define HUMIDITY_CHARACTERISTIC_UUID (0x2A6F)
BLEDis bledis; // device information
BLEService bleEnvService = BLEService(ENVIROMENTAL_SERVICE_UUID);
BLECharacteristic bleHumidityC = BLECharacteristic(HUMIDITY_CHARACTERISTIC_UUID);
#include <bluefruit.h>
#include <Arduino.h>
#include "Timer.h"
uint32_t vbat_pin = PIN_VBAT; // A7 for feather nRF52832, A6 for nRF52840
int moistureSensorPin = A0;
const int IRRIGATION_VALVE_PIN = 12;
const int SENSOR_EN_PIN = 13;
#define DEBUG_MODE false // Enables or disable serial comunication
@kikermo
kikermo / restiot.js
Last active July 2, 2019 08:01
Simple node js rest service that periodically reads battery and humidity
#!/usr/bin/env
var express = require('express');
const http = require('http');
var app = express();
var exec = require('exec');
const sensorMac = "<YOUR-DEVICE-MAC>";
const batteryChar = "00002a19-0000-1000-8000-00805f9b34fb";
const batteryHandler = "0x001b";
@kikermo
kikermo / blemoisturesensor.ino
Last active June 27, 2019 08:21
Simple script to read a soil moisture with an Adafruit Feather nfr52840
#include <bluefruit.h>
#include <Adafruit_LittleFS.h>
#include <InternalFileSystem.h>
#include <Arduino.h>
uint32_t vbat_pin = PIN_VBAT; // A7 for feather nRF52832, A6 for nRF52840
int moistureSensorPin = A0;
#define DEBUG_MODE true
@kikermo
kikermo / FirebaseGetListExtension.kt
Last active December 19, 2018 10:03
Get firebase paginated list
inline fun <reified FirebaseObject : FirebaseIdentifiableModel> FirebaseFirestore.getPaginatedFirebaseList(
path: String,
page: FirebasePage
): Single<List<FirebaseObject>> {
val firstDocumentMaybe = getFirstDocument(path, page)
return firstDocumentMaybe.isEmpty.flatMap {
return@flatMap if (it) {
Single.just(emptyList())
} else {
@kikermo
kikermo / FirebaseGetListExtension.kt
Created December 19, 2018 09:48
Firestore first document retrieving for pagination
fun FirebaseFirestore.getFirstDocument(
path: String,
page: FirebasePage
): Maybe<DocumentSnapshot> = Maybe.create { emitter ->
val collectionReference = collection(path)
.orderBy(page.orderBy, page.direction)
.limit(page.size * page.number + 1)
val listenerRegistration: ListenerRegistration = collectionReference.addSnapshotListener { querySnapshot, exception ->
querySnapshot?.run {
@kikermo
kikermo / FirebaseGetListExtensionSample.kt
Last active December 19, 2018 09:13
Simple Firestore
data class MyFirebaseModel(val aProperty: Int):FirebaseIdentifiableModel()
firebaseFirestore.getFirebaseList<MyFirebaseModel>(path = "mymodel")
.map{ ... } // Maybe map to a non firebase specific model
.subscribeOn(...)
...
@kikermo
kikermo / FirebaseGetListExtension.kt
Last active December 19, 2018 08:39
Simple List Fetching using Firebase Firestore and RxJava
inline fun <reified FirebaseObject : FirebaseIdentifiableModel> FirebaseFirestore.getSimpleFirebaseList(
path: String
): Single<List<FirebaseObject>> = Single.create<List<FirebaseObject>> { emitter ->
val listenerRegistration: ListenerRegistration = collection(path).addSnapshotListener { querySnapshot, exception ->
querySnapshot?.run {
emitter.onSuccess(toFirebaseObjectList())
} ?: exception?.run {
emitter.onError(this)
} ?: kotlin.run { emitter.onError(FirebaseUnexpectedException()) }
}
@kikermo
kikermo / build.gradle
Last active August 11, 2017 16:33
How to use a properties file to store keys instead of including them in build.gradle file
android {
...
def keys = new Properties()
file("../keys.properties").withInputStream {
stream -> keys.load(stream)
}
productFlavors {
@kikermo
kikermo / build.gradle
Created August 9, 2017 09:38
Simple example of flavorDimensions using the Android Gradle plugin
android {
...
defaultConfig {
...
buildConfigField "String", "API_URL", "http://default-url.com"
buildConfigField "String", "THIRD_PARTY_API_KEY", "rAnDomKeYF0rS3rV1ce"
}
flavorDimensions "skin", "env"