Skip to content

Instantly share code, notes, and snippets.

View TomyCesaille's full-sized avatar
🌃

Joris Lacance TomyCesaille

🌃
View GitHub Profile
@TomyCesaille
TomyCesaille / main.cpp
Created December 1, 2023 20:28
Rain alarm - Proto 3 - Passive Buzzer + PWM Modulation
#include "Arduino.h"
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
@TomyCesaille
TomyCesaille / main.cpp
Last active December 1, 2023 20:27
Rain alarm - Proto 3 - Speaker + External DAC + SD Card Reader
#include "Arduino.h"
#include "Audio.h"
#include "SD.h"
#include "FS.h"
#define SD_CS 5
#define SPI_MOSI 23
#define SPI_MISO 19
#define SPI_SCK 18
@TomyCesaille
TomyCesaille / main.cpp
Created October 19, 2023 20:48
Rain alarm - Proto 2 - Base Station Receiver
#include <LoRa.h>
#include <SPI.h>
#define ss 5
#define rst 14
#define dio0 4
int SWITCH_PIN = 15;
int LED_PIN = 2;
@TomyCesaille
TomyCesaille / main.cpp
Created October 19, 2023 20:45
Rain alarm - Proto 2 - Rain Sensor Transmitter
#include <LoRa.h>
#include <SPI.h>
#define ss 5
#define rst 14
#define dio0 4
int SWITCH_PIN = 15;
int LED_PIN = 2;
@TomyCesaille
TomyCesaille / rain-detector-read-analog-digital.ino
Created August 27, 2023 11:47
Rain alarm - Proto 1 - Rain sensor PCB
#define analogIn A0
#define analogLEDRawOut 6
#define digitalIn 8
#define digitalLEDOut 13
void setup() {
Serial.begin(9600);
pinMode(analogLEDRawOut, OUTPUT);
@TomyCesaille
TomyCesaille / generate-contacts-csv.js
Created January 29, 2021 22:45
generate a list of contacts with phone numbers into a gmail compatible CSV.
const fs = require("fs");
require("dotenv").config();
const startingNumber = process.env.STARTINGNUMBER;
const fileName = "5000contacts.csv";
const csvHeader =
"Name,Given Name,Additional Name,Family Name,Yomi Name,Given Name Yomi,Additional Name Yomi,Family Name Yomi,Name Prefix,Name Suffix,Initials,Nickname,Short Name,Maiden Name,Birthday,Gender,Location,Billing Information,Directory Server,Mileage,Occupation,Hobby,Sensitivity,Priority,Subject,Notes,Language,Photo,Group Membership,Phone 1 - Type,Phone 1 - Value";
fs.appendFileSync(fileName, csvHeader + "\n");
@TomyCesaille
TomyCesaille / lens-cap.scad
Created January 14, 2021 20:43
OpenSCAD Lens cap
/*
* A lens cap.
* Units in mm, default values are for
* a PENTACON auto 2.8/135 MC lens.
*
* 2021, Joris La Cancellera
* License: CC-BY-SA
*
*/
@TomyCesaille
TomyCesaille / index.js
Created April 3, 2020 16:15
store data into InfluxDB 2.0 with Node.js
const { InfluxDB, FluxTableMetaData } = require('@influxdata/influxdb-client')
let client = new InfluxDB({ url: 'http://localhost:9999', token: process.env.INFLUXDB_TOKEN });
const writeApi = client.getWriteApi(process.env.INFLUXDB_ORG, process.env.INFLUXDB_BUCKET);
//...
let offlineSince = (lastSeenDate === null) ? 0 : ((new Date().getTime() - lastSeenDate.getTime()) / 1000).toFixed(0);
if (offlineSince < 0)
offlineSince = 0;
@TomyCesaille
TomyCesaille / index.js
Created April 3, 2020 15:48
natural date parsing using chrono.js
const chrono = require('chrono-node');
// ...
let status = await statusElt.evaluate(x => x.textContent); // `last seen today at 13:15` format.
let lastSeenDate = chrono.parseDate(status);
// ...
@TomyCesaille
TomyCesaille / index.js
Created April 3, 2020 15:12
puppeteer status scraping on WhatsApp web
const puppeteer = require('puppeteer');
// The contact name to track (mind the case).
const contactTarget = "Jean-Mich";
(async () => {
const browser = await puppeteer.launch({
headless: false, // No headless to scan the QR code.
userDataDir: 'data/userdata' // Persist the session.
});