\n diff --git a/README.md b/README.md index d6e56ec..82823f7 100644 --- a/README.md +++ b/README.md @@ -57,13 +57,18 @@ $ make build Connect the esp32 board to your computer using the USBC connection port on the esp32 and a cable that will connect to your computer. -Press and hold the "boot" button then press the "reset" button and release both at the same time (shown below). This puts the esp32 into a flashing mode. +Press and hold the "boot" button, then press and release the "reset" button, then release the "boot" button (shown below). This puts the esp32 into a flashing mode. If done correctly, the lights should turn off.  The device should now appear on your machine as a serial port like "/dev/ttyACM0". -Now the command below can be run to flash the software to the device. +You can find your device within the output of: +```shell +$ ls /dev/tty* +``` + +Now the command below can be run to flash the software to the device. Replace the device name with yours. ```shell $ make DEVICE=/dev/ttyACM0 flash diff --git a/modules/ribbit/_static.py b/modules/ribbit/_static.py index e9e3e7a..4df2298 100644 --- a/modules/ribbit/_static.py +++ b/modules/ribbit/_static.py @@ -1,5 +1,5 @@ assets = { - '/index.html': b'\n\n
\n \n
\n
\n s\x829\xee\xef"\x04\xff\x17\xd4J\xe3;\xbfm\xe5\xdc\xd3\xed`4$OJc\xa6U\xf2\xf8\x1f\xfe?\xe1n\xfa\xe1MR;w\xaa\xcc\xccz\x82s@y(Gl\x84\xf4&\x93\xac\xc1\xf9|\x02\xdd\xdf\x17\xe2\xfe\xcbp\xbb\x07\x8fe\xf1\xbc\xef\xa3\x8e\x94\x1c\x8c\xa30"G\xc7\xe54\x0f.,\xfa\xbc2\xc3|\r\xc9\xb18i\xe5\x0b\xbe\xea\xbeV\xeb\xbc\xf5r^\x8f\xf7\xa6\xa3e0F\xe6\xc4\xf3\xe7\xc3\x94\x86\xedx\xae\x86\xefE\xae\xc9\xdbV\xe8\xdeo\xe5\xdcsQ\xd2\x10zBDDDDDDDDDD`\x82v1\xd9\xd19\xeenX$\x88}\xd3\xf8\xee\xbc)[\x7fOp[\xab.\x9b\x96\x99\xbe+\'S\xed\xdaEr\xd9\xdd\xab$\x96M\x89\xe5;z\x1ev\xe8\xea6\x16:\xd2\x9cY4\x19\xb7/F\xf0\xde\x88\xed7L\xe0>U\xca\x08\x1a;\xf0t\x94J4\xe7|\xa2J\xbb\xc6\x9d\x1d\xcbu\x91\xd6\t\xd8\x97\x8e\x95i\xc59\x9a\xc0)\xf3\xf5+K}\x8f:V\x06\xe7\xaecf\x12\xdb\x97\x8e\xd5Y\x7f\xd4\xf8\x8eS\x97\x99\'&`\xe0NDDDDDDDDD\xa4Vm\xbbK\x8c\xef\x08B\xecUE\x16)}\xcb\n\xbc\x84\x1d\xb8\xd2\xe4w\xca\xa9\x06cjd\xda\xf6y8\xb7.\xb1}O\xcb\x84\xe9\xc9&p\x7f\x05\xe7>\x03u\x17\xea\xbb\xa8\x91\x13uvG\xa1\xf2\x84\x16\xf6[\xf1\x0c\xf7\xe8G\x01]\xe0\x15\x8b\xd7\x96\x13\xb8k%\x11\xa0\xbbC\xcb\xc7\x13\xd2kw>\xba\xf4\x11\xd6\x8f\xd9\xed\xfed<\xf4>g\x87\xae\xd4e\x13\x92\xcf\xe7\x85\x88\x88\x88\x88\x88\x88\x88\x88\x88\xe8#\xad)L\x17\x82\xeaF\r\xa5\xc7\x1e)sG\xc3\xe6\xb4Xk\x12r\xca\xca\x8b\xb4\xdd\xbaB\xea\xc3\x84\x8e\x9f1\x81\x8br$\xff\xf4\xb3bBg\nn7\xe0\xbd\xdc\x8ez\x0c\xf5ra\xee\xfb\x07\xa5\xe6n^TX\xf8\xb4\xacj\xc3\xa2\xab\xa9\x9d\xd7i\x90>\xdeq6Q\xb7\xbbv\xd8\xc7\xff\xff\xf5o\xa3\xfe|&\x16\xc8\xb5\xfcv\xf9\xa3\xfb\xe6\n\x11\x11\x11\x11\x11\x11\x11\x11\x11\xd1G\x9e\xe5{(]\x94\xf4\xc5"\xc1\xeb>\xb3\xb6\xbd\xc6\xba\xef\x14\x0e\xdc\xc7P\x9bY \x7f\x92i\xd5\x114\xb6\xdf)V\xd8^c\xfc\xd4y&\xf0\xa6Z\x81\xd3k\x02w#\xde\xdb\x13\xa8\x83\xa7J\xb0^\xadr\xa2\x0e\xf7r;\xec[\xb6,\xd2\xd9\xee\xde\xcek5\x84\x8f\x1e{\x19\x8fY\xb1p\x81\xc4\x83.!\xa2\xe2^\x1a\x19\x91\x97_9,\xc3G\x0f\x8e\xab\x0e\x1e9$?=6,#x=U\x07\xae\xf3\xf8\x0b\x9f\xcb0>\x93a~.DDDDD\xf4Kp\x10\xdfK\x0e\xa1\x0e\x8c\xef\xbb\x8c~/}\xe1\xc0\xab\xf2\x12\xbf\xcb\x10UW,\xf0\xa4>\xf0.D\x80\xfa\xcfEB\xd7\xef\xc52\x89\xf3c\x1b>X\x81\xbb\xca\x8b\xb4~\xadW\xea\xc39\xba\xe8\xaa\xe5{\xd8\xbaZ\xc6O\xd7`{\xb1\t\xdc\xab,\xdf]\x84\n\xf0\x9c\xc7q\xdf\x0b\xa8#\xa8\xb7N\x95\xc0\xbc\xd2\xc2\xfc\xf6\x8a\x17p\xc5\xa2\xab:\xda\xa6\x13cf\x9a\x07{\n\xf7?lB\xf7S\xb8\x86R\xef\'\x85\x88\xc6\xf6\xe2\xa1#\xa8W&\xed?2|\xfa\xfe#\xfb?Vj\x8d\x1c\x1e\x9e\xf4\xdck/I\xfe9\xfe\xcbP\xb5\xe0:\x0b\xaaf<\x9f\xcb\xf0+\x07&\x1f8xt\xd2\x01|\xaeDDDDDD\'\xdb!|\x8f\x1992\x8c&\xad\xfd\x93\xc7\xf3]\xe6\x7f\x0e\x1e\xaay\xfa\'o\xc9\xf3\xc3\xfc\x8eITU\x1a>\x07\xee\x19\xd8\x0e\x15\t[\xff\xcb\xf2\x9d\xa9(\xf9\xb0\xb0}G\x8c\x9f\x12\r\xdf}W\xecl\x87\xd8\x99\xe4\x19&\xeb\x9e\x1f\x0f\xddK\xf0^-;p\x97 \x80\xdf0\x1a*\xa3\x9eD\xbd\x88\xfa\xd9\xa9\x12\xa2\x8fw\xe1T;\xf0*\xdeOC.\xa5\x8b\xccv\xefY\xa5\x01|4\x9ag\xe9\x15\x1b\xe6OB\xe0.x\\\x88~\x99\x86\x8f\x1eFxzH\xb7e\xd5\xab#\xba\x9d`\xd19\x1d\xfa\xb5\x03\xaf\x1e\xbe\x19u/\xea\x9e\x12\xean\x9c\xcb\xd4\x83\xc7\x0e\xca\xfe\xa3\xfc\x97\xa1j\xc1u\x16\xd4t\xd4\x9a\x12?\x97\xfb\xf0\xb9\\\xb3\xff\x95\xc3\x17\xa0\x84\xaa\xe3@\xf4\xcfb\x99\x15\xfd3\xc7\xcf\x87\x88\x88\x88\x88>\x9c\xf0\xbdD\x0e\xbez\xb8\x06\xdb\xf48\xbec\xde;|t\xa4}\xff\x91WN\x1b\xe6wL\xa2\x93\x12\xb8\xd7`{g\x91\xa0\xf5\x80\xf1]\x1b%\xb5\xfd\xb5\xf2aR;\xe0\x89\xe4\x9f\xd1y\xefV\xd6\x11\xe3;\x85\x0ex\x9dm\xffO\x9f\x7fX\xea\x82\xc4\xd9\x08\xe5?\x87\xba\xc2\n\xbd\xb9\xa3\x013\xea\xfe(\x88\xff!\xea\xa7\xff\xcb\xde\x99\xc5FQ\x06p\xfc[\xda\xd2\x02\x02%\x80\x1cF\x8d\x10"!$\x82`4\n\x18\t\xed\xcel\x81\x80\x18\xa2\xb4;\xbb\xa5\x11\x05\x82\x0fh\x00I4^\xf1\x81\x174P\x95\x9d\x99R\x8c\'\xc4\x18\x9f<\x83GbB\xe0A\t/\x04"W\x1bv\xbb\xbb\xb3\xb3WK\x91\xa6\xe3\x7f\xa6\x1b,\x85B\xb7e\x9bv\xfa\xff%\xbf|\xdb\xee\xd1=\xe6\xd8\xfd\xf5\xcb,L\xc16\xd81T"{\x01\xe3\xbd\xf3%\xaa\xab\xfe?\xb4\xccI8\x0f\xcb\x90X\x87c\xfd\x13\x92\x07\x05\x89t\xb0\x18\xa1m\x19\x82[0/\xd3\t\x05a{~4e\x14\xe0~\xc5`|\x1e\xee\xdbEh\xf5\xd1\xce\x96\x8cY\x93\xc6c\ng\xf8f\xa8\xc0\xcb\xcc\xeb\xd0\xea\xabX\xbe\x8ec\x99y\x08\nR\x18r\xc1|.T\xf2]\x97q\x9d%x\x9d\x8ab\\o\x08!\x84\x10B\x88K\xc9}\x8e)\x81G\xa0\x95\x87G`\t\xdf+\x13R`\xa4\x10f&\x7f\xb6\xc9\x8e\xcc\x9b`\'\xb4zxUV\x95Z\xc4f\xb1t\xc7"1"\xb0\x84X\xf7\xce\x1bb\xf1\xb7kE\xa5V\xe3\xcc\x82\x97\xa0W\xf3\x0b\xf9\xf3Z\x9cVF\xe3y\x19\x8fY\xf0\x93eM\x99\x83\xd3\x15\xb0\x16\x97\xdb\x8d\xf1C\xf8\r<\nO\xc0\xd3\xf02l\x1d*\xd1|\xa0J7\xfe\xdc\xe9\xb3\xbf\x90\xf6\xd0\x96"\x9f\xee\x8e\x19\xee\x91t\\\x84Sq\x11\xcd$\x86\xbd1G\xb3\x9b\t\x11\xc6\xe3;g\x9a\xe2\xbc\x0b\x8f\xd9fG\xbaH2>\x0e\xc1\xad\x11\x8f\xb7\x1d\xb6\xe5a:\x9a5\xb7c,dp\xbf\x00\xad>\xda\x81\xe0^\xcd\xe0>(oTw\xe5\x19\xdc\x8f1\xb8\x17\x96x6i\x07\xf7\x97\xf0|\xa7\xf2\\\x8f\xdbq\xbd\x10\xb6\x03c\xf8\xfa\x90\x1b\xf7\xeb\xd1\xfe\xedK\xd3\xa60ZM\x1e\xe7\xf4\x0e\x18YC\xc4\xf2|n[\xd2\t\x11N\x18\x82\xeb*!\x84\x102\xa0\xe0~\x18Zy\xf85,fp\'\xa4\xc0<\xd3\xb0\xde\x99\xcd\x8d\x88\\\x99\x9b\xa5m\xdd\xa4\xaa\xecX\x89\xd9\xcb\x95\x1f\xd5\x88\x91\x88eYb\xcc\xab\xf3\xc5s\xfa6!\x87\x02\x02\x91\x1d\x06`\x8f\xd3\xf0\xed\x9dk\xc5\xaa\x86\x8dc|Z\xedT\x9f\x1a\x98%\xab\xc1G\xf0\xfb\xa5>-\xb8\x1ac\rb\xf5\x16\x8c\xbb\xe0{\xb0\x1e~\x05\xbf\x87\xbf\xc3\x13\xf0\x14<\x8b\xdbm\xc2\x18\xc6\x18\xc5\x18\x83\x064a\x12\xa6`\x06fa+l\x83W\xba\xd9~\x0b\xaf\xc06\x98\x81I\x18\x83\x97\xe0I\xf8\x07\xfc\x11\x1e\xc6\xdf\xdb\x8f\xf1-\xb8\x1dn\x85\x9b%\xcc\xea\x974e\'\xce{\x17?\x1f\x80?\xc330\x01-\xf8\x8f\xa4\x07\xe6a\x14n\xa09\x99\x10\x97\xcc\xc4\xa8H\xda\x98\xd3\x921\x96\xc0\xa7\x86\xa7\xf1\xc7ZZ\xe3s\xf1\x01xF \x1e+\xf5>K\nwB\xe1N\x08!\xf5\xa1p\'\x84\xd8\xe4\xa2\xe7\xfa\x05s\n\x04\xc4\xfau!\x84\xbb\x96_4.\x0f\t#\xdc#.\xcd2\x04\xf18\xd2Z\xd5[\x7fz\xfe4GX7y\xee\x9fq\xa3\xec\xd2\xb5s]\x81\xedC\xae\x88\xa4\x97;j\xa7\xdb\xc2\x1d\xa8yG;\xedV\xc1k\xf2\xa2\xcb\xcf\x93+\xd7\xcfF)\x9b\xa6i;\xf6\x81]Rg\xe0\xa0\xa3eF\xc6\xef\xed\xc5\xb6sY\xc7]P\xb87\x01\x10\xed\xa2\xccP\xbd\xb9M\x01\xd9.|;\xeci\x7f\xbc\x8f\xc7\x10\x1d\x911f\xbb\xee7o/\xf7\xba\xd3\xcbL\x8f(O\xe1z\xb6\x14\xee\xad\x03\nwB\xe1\x9e\xfc\xb4\x84pG\xb6C\x06\xdeT\xe9\xf5\xa6\xeb\xbe\xd4+-C\xe1N(\xdc\t!\xa4>\x14\xee\x84\x10\x9b\xfc\xe21"\xb7P\x95\x95)\xb8\x14r}\x0f"\x83R\x99_8n\x14"N\x9a{R\xa3\x84;\xca\xa2\xa8^\xe2\xc5\x88t2\xea\xda\x0b\xe4\xda\xaf_l\x16\xd9\xae\x04\xf6\xff\x7f\xf1\x82\xbcj\xc2\x08\x89\xc1Re\x9d\xed\xbe\x8dtC\x04\x9eoH\xb8;%p\x06!_\xd6\xcav\xe4\xec!\x83\xe5kk\x9fW=\xe9\x9b\xbc\xdd\x93o\xbb\nB\xbf\xb6\xad{\x91\x87\xd0\x0e\xd6\x94\xa1poR \xda\x9d\xd8\'lLs1]\xdf\x8823\xa5.\xcb\xc87\xb7{D\xa9\x87\xb2\x98\xc2=\xb1\xa1p\'\x14\xee\xc9O\x0b\twD\x1d\xe3\x8da\x95;+\x95pO\xa9AT)\xdc\t\x85;!\x84\xd4\x87\xc2\x9d\x10b\x93\xfb\xc4\x04\x917\x1f=\xdc\xe7\x8d\x1b\xaa\xe4:"\x83\xb2\x1b\x99h\xf7p_\x10{\x0fw\x08c\x95\x01\x90\xc7\xdf;\xbd\xdb\xbb\xf7\xcc\x91\x85\xaf<\xe4\x94\x92i\x96\xa8u/^\xfd\x84\xec7\xa0\xb7DouGb\xfb\x91\xab0\x10iC\xc2\xdd\x91\xed\x1d\x90\x12D"\xf6:\x06\x9cp\x94,y\xe3\xd1f\x91\xed\x1f\xfd\xb0T\xceYz\xbf\xec|\xc0\xfej{NV\xa3-\xed8p*\x85{3\x9e\xb0\x85\xee7\x10\xcf\x91x\xbc\x04\xd9\x1dk=w\x88\xfbC\xdc\x96\x99R\xc2\x81\xc2\xbd\xf5A\xe1N(\xdc\x93\x9f\x16\x14\xee*k]>\xb3\xa7\x0bb\xb0b{\xea|\xa6\x14\xee\x84\xc2\x9d\x10B\x82\xa0p\'\x84(N<\xa7\x1f\x84\xfbx\x91;\xaf\xe0T\x88\xf5\nD"A)\xb89\xbfx\xa2\x186{h\xcc5\xdc!\xb6\x95\xbc\x9e\x82\xecp\xc4\xf5\x85(\xc9\xb2\xe6\xf3\x05N9\x99f\xcd\rw\x8e\x96\x99\x99\x99u%\xf6\n$\x1b\x11\xa1\xe8\xd0\xa1\x83j\xf3(\xc4rn\x12\xe4t\xeb*\x1f\x9b}\xbbjs\xb3\xdd xu\xcd3\xb2\xff\xf1}\xeb\x96\x95\xf9\x12\xe9\xce:\xee\x14\xee\xcd\td\xbb\xd0\x03\x1e\x01Y\xde\x15\xef\xeb\x01\xc4\x8aA8\xecFn\xf5z\xbd\xe9~\xc3\x9b\xf2\xd2\x9d\xc2=q\xa1p\'\x14\xee\xc9O\x0b\x0b\xf7=\xc8\xf3\xba\xdf\xec\x88\xa9p\xa5H=w\nwB\xe1N\x08!\xf5\xa1p\'\x84\xd8L\x9a7I@\xaa\x8b\xdc\xa2q\x031\xfd\x01\x91\xfb\xc8\xb4\xbcE\x13E\xde\xac\xd11\xf5p\x87\\\x17\xe8\x9d\xad\xca\xc9\xccv\xc4u\xc7\xfd\xb3\xe5=\x8fMQ=\xba#(\r\x83@p\xbf\xffe\x89=@\xe9\xbb\x9f\x15\xcb\xb5\x9b^\x8c\xb8g\xbcZ\xf6\xa5\xb7g\xc8#\xfa\x1cZ\xb7\x96{\x05\x1e\x9f\xb0/\x89\x9d\x9d\x9d-jj\xbc\x1f\x8c\xe9[\x88D\xec\xb24\xe3&_,?\xf8\xba\x04\xeb\x0c\xbfM\xf5\xde6 \xd1\xf4\x84W\xcb\xad\xfax\xae\xfc\xaf\xf3O\x96\xe9\xe9\x19N[\x7fD\xfaS\xb8S\xb87\'n\x9f)\xdc\x86)4\x9f]\xe7\xbd\x9df\x99\x7f\xc6\xfb\xab\x8eA:l\xd6|\xc6 u!\xbd\r\xb2#\x95\xa1pO\\(\xdc\t\x85{\xf2\xd3\xc2\xc2]\xc5\x8b\\\xbb\xf6K\nw\nwB\xe1N\x08!\x14\xee\x84\xa4Frog Sensor Status
Frog Sensor Status
// Update GPS data
updateData('GPS', getGPSData(data));
+ // Display firmware version under Other Info
+ firmwareVersion = document.getElementById('firmware-version');
+ firmwareVersion.innerHTML = `Firmware Version: ${getFirmwareVersion(data)}
`;
+
prevData = data;
});
@@ -279,6 +284,11 @@ Frog Sensor Status
return ret;
}
+
+ // Get the firmware version from the board sensor
+ const getFirmwareVersion = (data) => {
+ return data.board.version;
+ };
const registryPath = getRoute('/api/config');
fetch(registryPath)