<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hackerdojo.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Beau-K6eau</id>
	<title>HackerDojo Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hackerdojo.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Beau-K6eau"/>
	<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Special:Contributions/Beau-K6eau"/>
	<updated>2026-04-16T22:50:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Access&amp;diff=309</id>
		<title>Access</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Access&amp;diff=309"/>
		<updated>2024-12-11T03:33:26Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: defa1337 EXPERIMENTAL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strike&amp;gt;&amp;lt;big&amp;gt;GRANTED&amp;lt;/big&amp;gt;&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readers ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LAB0  00:13:00:00:22:2f  192.168.1.100  AVEA-00130000222F  Sat Jun 12 00:02:45 2010&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== fobs ==&lt;br /&gt;
&lt;br /&gt;
=== ENABLED ===&lt;br /&gt;
* 0012514585&lt;br /&gt;
&lt;br /&gt;
=== DISABLED ===&lt;br /&gt;
* 0013473798&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=USB-RS232-WE-1800-BT_5.0_FTDI&amp;diff=282</id>
		<title>USB-RS232-WE-1800-BT 5.0 FTDI</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=USB-RS232-WE-1800-BT_5.0_FTDI&amp;diff=282"/>
		<updated>2024-09-21T00:16:56Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: 5 volt USB/Serial cables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Electronics Labs has a number of different USB to Serial converters. There are several of these particular FTDI USB-A to bare wires with 5 volt power and signaling.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO NOT USE THESE&#039;&#039;&#039; with most newer Arduino, ESP8266, ESP32 or other such microcontrollers as they may or may not be 5 volt tolerant and generally are designed for 3.3 volts.&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Beau-K6eau]] ([[User talk:Beau-K6eau|talk]]) 17:16, 20 September 2024 (PDT)&lt;br /&gt;
&lt;br /&gt;
[[File:USB-RS232-WE-color-pin-outs.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:USB-RS232-WE-Cable-Signal-Descriptions.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:USB-RS232-WE-Converter-Cable-Circuit-Schematic.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sauce: https://ftdichip.com/wp-content/uploads/2023/07/DS_USB_RS232_CABLES.pdf&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:USB-RS232-WE-Converter-Cable-Circuit-Schematic.png&amp;diff=281</id>
		<title>File:USB-RS232-WE-Converter-Cable-Circuit-Schematic.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:USB-RS232-WE-Converter-Cable-Circuit-Schematic.png&amp;diff=281"/>
		<updated>2024-09-21T00:13:27Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:USB-RS232-WE-Cable-Signal-Descriptions.png&amp;diff=280</id>
		<title>File:USB-RS232-WE-Cable-Signal-Descriptions.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:USB-RS232-WE-Cable-Signal-Descriptions.png&amp;diff=280"/>
		<updated>2024-09-21T00:13:17Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:USB-RS232-WE-color-pin-outs.png&amp;diff=279</id>
		<title>File:USB-RS232-WE-color-pin-outs.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:USB-RS232-WE-color-pin-outs.png&amp;diff=279"/>
		<updated>2024-09-21T00:13:07Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=278</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=278"/>
		<updated>2024-09-17T20:35:50Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Update */ Updated/Fixed!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
pre-empting various babbel to follow on which wire to what. Use a suitable SPI to USB device and connect 3v3, ground, input (DQ0/CIPO), output (DQ1/COPI), Chip Select and Clock. Leave the flip&#039;n WP (W#) &amp;amp; HOLD out of it, they&#039;ve got the necessary pull-ups on the PCB and in circuit already. Also yes, you can manually power up the chip with pulling CS aka S# low, and then create a falling edge to execute &amp;quot;A&amp;quot; command, or just leave it connected to the device doing all the other work for you. Leaving the fumbling for posterity and testing of n00b&#039;z as to your potential commitment of teh &#039;RE&#039; arts. AND it totally doesn&#039;t matter if the LCD and/or Capacitive Touch are connected as long as you hold it in reset (MCLR grounded).&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump (blank/wiped?) ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post boot re-dump ===&lt;br /&gt;
&lt;br /&gt;
After looking at the size of the firmware, the configuration of the PIC32 and other factors, setup a new test to do a minimal boot. Using a chip clip and the Tigard I was able to verify 3v3 power rail, convenient LED and test points labeled 3v3. Probing a bit more was able to identify 5v LED and test point along with easily accessible pins via connection headers that are currently disconnected form their respective components. The 5v rail can be tapped from Pin 4 on PM5 and ground Pin 4 on PM1. I used the pin from another micro-controller pulled directly from the USB connection to bring up the 5v rail and the chip clip and Tigard in the previous configuration for the 3v3. Both of these power rails are isolated and able to use a common ground.&lt;br /&gt;
&lt;br /&gt;
I reconnected the LCD &amp;amp; Capcitive Touch flat flexes on the main board ZEM0021-0x and powered up the 3v3 &amp;amp; 5v and released the PIC32 MCLR from ground to disable the reset state. In this configuration there are no other connectors or power sources attached and after a few seconds you get the customer powering on beep and a blank screen. The LCD then turns on and a &amp;lt;code&amp;gt;Trouble powering on! (0x7)&amp;lt;/code&amp;gt; message is displayed, followed moments later by a continuous beep and a power cycle loop continually trying to restart itself.&lt;br /&gt;
&lt;br /&gt;
Now trying to use the previous method of reading the 8MB SPI flash, with MCLR grounded, results in no devices being detected. Disconnecting the LCD, Capacitive Touch, and 5v supply once again enumerates the SPI memory and it can be read out to a local file. This time it appears to have actual data following all zeros up to 000dffff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 458752 -n 1681 roti-b_3v&lt;br /&gt;
00070000  40 5a 80 bf 64 10 88 bf  68 10 88 bf 34 10 88 bf  |@Z..d...h...4...|&lt;br /&gt;
00070010  5c 67 50 f1 7c a2 c4 64  1b 23 00 6b 50 f1 7c c2  |\gP.|..d.#.kP.|.|&lt;br /&gt;
00070020  00 6b 70 f1 60 da 70 f1  64 c2 70 f1 65 c2 3a 18  |.kp.`.p.d.p.e.:.|&lt;br /&gt;
00070030  eb 3e 08 6c 3a 18 3d 59  08 6c 3a 18 77 7c 08 6c  |.&amp;gt;.l:.=Y.l:.w|.l|&lt;br /&gt;
00070040  05 b2 00 6c 03 6d 14 6e  0e 6f 3a 18 d0 46 04 d2  |...l.m.n.o:..F..|&lt;br /&gt;
00070050  44 64 a0 e8 80 3a 07 9d  6f 45 11 eb 0e 5b f5 64  |Dd...:..oE...[.d|&lt;br /&gt;
00070060  25 67 19 60 0f 68 8c e8  14 6c 3a 18 90 d0 04 d3  |%g.`.h...l:.....|&lt;br /&gt;
00070070  40 6c 3a 18 90 d0 0d ec  04 93 3a 18 90 d0 83 67  |@l:.......:....g|&lt;br /&gt;
00070080  07 b2 09 e2 80 a2 3a 18  90 d0 ff 49 01 48 0f 6a  |......:....I.H.j|&lt;br /&gt;
00070090  11 e9 4c e8 f5 29 75 64  a0 e8 00 65 78 21 01 a0  |..L..)ud...ex!..|&lt;br /&gt;
000700a0  e5 64 00 6a 1c 67 51 f0  40 c0 51 f0 00 48 7d 67  |.d.j.gQ.@.Q..H}g|&lt;br /&gt;
000700b0  41 c0 20 6a 50 c3 77 6a  4b ea 51 c3 04 04 0a b2  |A. jP.wjK.Q.....|&lt;br /&gt;
000700c0  00 6d 05 d0 3a 18 f4 c6  06 d2 78 6a 7d 67 4b ea  |.m..:.....xj}gK.|&lt;br /&gt;
000700d0  01 48 04 04 01 6d 05 d0  3a 18 f4 c6 51 c3 65 64  |.H...m..:...Q.ed|&lt;br /&gt;
000700e0  a0 e8 00 65 4d a3 05 9d  03 6a 4e ec c3 64 15 2c  |...eM....jN..d.,|&lt;br /&gt;
000700f0  e1 f7 1d 4a 0b b3 40 db  0b b3 80 db 0b b3 40 db  |...J..@.......@.|&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
00074000  18 6c 05 6d 3a 18 73 85  04 6e d0 f0 5c c8 63 64  |.l.m:.s..n..\.cd|&lt;br /&gt;
00074010  a0 e8 00 65 c3 64 e0 f3  08 6c 0b b5 3a 18 eb 09  |...e.d...l..:...|&lt;br /&gt;
00074020  00 6e 3a 18 71 02 00 65  3a 18 ae c1 00 65 3a 18  |.n:.q..e:....e:.|&lt;br /&gt;
00074030  a6 86 00 65 3a 18 20 ce  00 65 3a 18 16 c8 00 65  |...e:. ..e:....e|&lt;br /&gt;
00074040  43 64 a0 e8 15 00 07 9d  c3 64 0a b4 3a 18 68 cd  |Cd.......d..:.h.|&lt;br /&gt;
00074050  00 65 3a 18 52 d8 00 65  02 6c 07 b5 3a 18 eb 09  |.e:.R..e.l..:...|&lt;br /&gt;
00074060  01 6e 64 6c 05 b5 3a 18  eb 09 01 6e 43 64 a0 e8  |.ndl..:....nCd..|&lt;br /&gt;
00074070  9d 5b 07 9d 59 42 07 9d  01 19 06 9d 5c 67 30 f7  |.[..YB......\g0.|&lt;br /&gt;
00074080  70 9a 98 6a 58 eb 0a b3  12 ea e3 64 49 e3 40 f0  |p..jX......dI.@.|&lt;br /&gt;
00074090  44 aa 09 2a 3a 18 44 d0  00 00 00 00 00 00 00 00  |D..*:.D.........|&lt;br /&gt;
000740a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The zeros continue until another section starts at &amp;lt;code&amp;gt;000a0000&amp;lt;/code&amp;gt; and there is a block of strings starting around &amp;lt;code&amp;gt;000a0f20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 0x000a0f20 -n 1024 roti-b_3v&lt;br /&gt;
000a0f20  00 10 00 00 24 d5 01 9d  55 6e 64 65 66 69 6e 65  |....$...Undefine|&lt;br /&gt;
000a0f30  64 20 61 63 74 69 6f 6e  20 69 6e 20 74 68 69 73  |d action in this|&lt;br /&gt;
000a0f40  20 73 74 61 74 65 20 25  64 00 00 65 59 65 73 00  | state %d..eYes.|&lt;br /&gt;
000a0f50  4e 6f 00 00 7b 22 6f 70  63 6f 64 65 22 3a 22 62  |No..{&amp;quot;opcode&amp;quot;:&amp;quot;b|&lt;br /&gt;
000a0f60  61 74 63 68 43 6f 6d 70  6c 65 74 65 64 22 2c 22  |atchCompleted&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f70  70 61 79 6c 6f 61 64 22  3a 5b 22 25 64 22 2c 22  |payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f80  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0f90  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fa0  22 2c 22 25 64 22 2c 22  25 2e 31 66 22 2c 22 25  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fb0  2e 31 66 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0fc0  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fd0  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fe0  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a0ff0  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1000  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1010  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1020  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a1030  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a1040  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1050  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1060  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1070  2e 31 66 22 2c 22 25 2e  31 66 22 2c 22 25 2e 31  |.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1|&lt;br /&gt;
000a1080  66 22 2c 22 25 2e 31 66  22 2c 22 25 2e 31 66 22  |f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;|&lt;br /&gt;
000a1090  5d 7d 00 00 50 6f 77 65  72 20 73 65 74 74 69 6e  |]}..Power settin|&lt;br /&gt;
000a10a0  67 73 0a 69 73 20 6e 6f  74 20 73 75 70 70 6f 72  |gs.is not suppor|&lt;br /&gt;
000a10b0  74 65 64 2e 0a 49 20 61  6d 20 69 6e 20 50 72 6f  |ted..I am in Pro|&lt;br /&gt;
000a10c0  64 75 63 74 69 6f 6e 20  4d 6f 64 65 2e 00 00 65  |duction Mode...e|&lt;br /&gt;
000a10d0  50 6f 77 65 72 20 73 65  74 74 69 6e 67 73 20 69  |Power settings i|&lt;br /&gt;
000a10e0  73 20 6e 6f 74 20 73 75  70 70 6f 72 74 65 64 20  |s not supported |&lt;br /&gt;
000a10f0  28 50 52 4f 44 29 00 00  49 20 61 6d 20 61 6c 72  |(PROD)..I am alr|&lt;br /&gt;
000a1100  65 61 64 79 20 6f 70 65  72 61 74 69 6e 67 20 69  |eady operating i|&lt;br /&gt;
000a1110  6e 0a 74 68 65 20 6f 70  74 69 6d 61 6c 20 70 6f  |n.the optimal po|&lt;br /&gt;
000a1120  77 65 72 20 6d 6f 64 65  2e 00 00 65 50 6f 77 65  |wer mode...ePowe|&lt;br /&gt;
000a1130  72 20 73 65 74 74 69 6e  67 73 20 69 73 20 6e 6f  |r settings is no|&lt;br /&gt;
000a1140  74 20 73 75 70 70 6f 72  74 65 64 00 49 74 6f 72  |t supported.Itor|&lt;br /&gt;
000a1150  53 65 72 76 20 6e 6f 74  20 69 6e 20 63 6f 72 72  |Serv not in corr|&lt;br /&gt;
000a1160  65 63 74 20 73 74 61 74  65 20 28 25 75 29 00 00  |ect state (%u)..|&lt;br /&gt;
000a1170  49 27 6d 20 61 6c 72 65  61 64 79 20 63 6f 6e 6e  |I&#039;m already conn|&lt;br /&gt;
000a1180  65 63 74 65 64 0a 74 6f  20 22 25 73 22 2e 0a 44  |ected.to &amp;quot;%s&amp;quot;..D|&lt;br /&gt;
000a1190  6f 20 79 6f 75 20 77 61  6e 74 20 6d 65 20 74 6f  |o you want me to|&lt;br /&gt;
000a11a0  0a 73 77 69 74 63 68 20  74 6f 20 61 6e 6f 74 68  |.switch to anoth|&lt;br /&gt;
000a11b0  65 72 20 6e 65 74 77 6f  72 6b 3f 00 2a 00 00 65  |er network?.*..e|&lt;br /&gt;
000a11c0  25 73 2c 20 25 73 00 00  25 73 20 73 65 6c 65 63  |%s, %s..%s selec|&lt;br /&gt;
000a11d0  74 65 64 00 0a 53 74 6f  70 70 69 6e 67 20 6f 6e  |ted..Stopping on|&lt;br /&gt;
000a11e0  67 6f 69 6e 67 20 70 72  6f 63 65 73 73 2e 2e 2e  |going process...|&lt;br /&gt;
000a11f0  00 00 00 65 47 69 6d 6d  65 20 61 20 73 65 63 21  |...eGimme a sec!|&lt;br /&gt;
000a1200  00 00 00 65 49 20 61 6d  20 73 74 69 6c 6c 20 73  |...eI am still s|&lt;br /&gt;
000a1210  74 6f 70 70 69 6e 67 20  63 6f 6f 6b 69 6e 67 21  |topping cooking!|&lt;br /&gt;
000a1220  00 00 00 65 4e 6f 20 76  61 6c 69 64 20 72 65 63  |...eNo valid rec|&lt;br /&gt;
000a1230  69 70 65 73 20 66 6f 75  6e 64 20 69 6e 20 52 6f  |ipes found in Ro|&lt;br /&gt;
000a1240  74 69 6d 61 74 69 63 00  25 64 29 20 30 78 25 30  |timatic.%d) 0x%0|&lt;br /&gt;
000a1250  32 78 20 25 73 00 00 65  46 6c 6f 75 72 20 64 61  |2x %s..eFlour da|&lt;br /&gt;
000a1260  74 61 20 69 73 20 69 6e  76 61 6c 69 64 20 66 6f  |ta is invalid fo|&lt;br /&gt;
000a1270  72 20 52 65 63 69 70 65  20 25 64 20 69 6e 20 52  |r Recipe %d in R|&lt;br /&gt;
000a1280  6f 74 69 6d 61 74 69 63  00 00 00 65 44 6f 20 79  |otimatic...eDo y|&lt;br /&gt;
000a1290  6f 75 20 77 61 6e 74 20  74 6f 0a 70 6f 77 65 72  |ou want to.power|&lt;br /&gt;
000a12a0  20 6f 66 66 20 6d 61 63  68 69 6e 65 3f 00 00 65  | off machine?..e|&lt;br /&gt;
000a12b0  44 6f 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 70  |Do you want to p|&lt;br /&gt;
000a12c0  6f 77 65 72 20 6f 66 66  20 6d 61 63 68 69 6e 65  |ower off machine|&lt;br /&gt;
000a12d0  3f 00 00 65 50 69 7a 7a  61 20 62 61 73 65 20 69  |?..ePizza base i|&lt;br /&gt;
000a12e0  73 20 6f 6e 20 74 68 65  20 68 6f 74 20 70 61 6e  |s on the hot pan|&lt;br /&gt;
000a12f0  73 2c 20 70 6c 65 61 73  65 0a 70 69 63 6b 20 69  |s, please.pick i|&lt;br /&gt;
000a1300  74 20 75 70 20 69 6d 6d  65 64 69 61 74 65 6c 79  |t up immediately|&lt;br /&gt;
000a1310  20 74 6f 20 61 76 6f 69  64 0a 6f 76 65 72 63 6f  | to avoid.overco|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extracting all the ASCII strings yields this list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
e(%d[%dms]-&amp;gt;%d[%dms]) x %d -&amp;gt; %d&lt;br /&gt;
update.img&lt;br /&gt;
Front Door state changed: %d&lt;br /&gt;
Kneader Door state changed: %d&lt;br /&gt;
Undefined action in this state %d&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;batchCompleted&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;]}&lt;br /&gt;
Power settings is not supported.&lt;br /&gt;
I am in Production Mode.&lt;br /&gt;
Power settings is not supported (PROD)&lt;br /&gt;
I am already operating in the optimal power mode.&lt;br /&gt;
Power settings is not supported&lt;br /&gt;
ItorServ not in correct state (%u)&lt;br /&gt;
I&#039;m already connected to &amp;quot;%s&amp;quot;.&lt;br /&gt;
Do you want me to switch to another network?&lt;br /&gt;
Stopping ongoing process...&lt;br /&gt;
Gimme a sec!&lt;br /&gt;
I am still stopping cooking!&lt;br /&gt;
No valid recipes found in Rotimatic&lt;br /&gt;
Flour data is invalid for Recipe %d in Rotimatic&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Pizza base is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
Puri disc is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
%s-out notification shown&lt;br /&gt;
Do you want to stop making %s?&lt;br /&gt;
Do you want to stop making?&lt;br /&gt;
Do you want to start making %s?&lt;br /&gt;
Do you want to start making?&lt;br /&gt;
Make sure flour container is full. Start making?&lt;br /&gt;
Make sure water container is full. Start making?&lt;br /&gt;
Started making %s&lt;br /&gt;
DBG_ASSERT(): %s:%d.&lt;br /&gt;
No valid recipes found&lt;br /&gt;
Selection (%d) &amp;gt;= RecipeCount (%d)&lt;br /&gt;
Selection (%d) &amp;gt;= FlourCount (%d)&lt;br /&gt;
Roast level cannot be changed&lt;br /&gt;
2 Drops&lt;br /&gt;
1 Drop&lt;br /&gt;
Oil level cannot be changed&lt;br /&gt;
This app provides tips and support.&lt;br /&gt;
What do you want to cook?&lt;br /&gt;
Skip&lt;br /&gt;
Pipe cleaning. Help screen shown&lt;br /&gt;
Pipe cleaning. Resume screen shown&lt;br /&gt;
Pipe Sanitize step %u, %u&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;feedback&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;]}&lt;br /&gt;
DecDB() %d&lt;br /&gt;
IncRoti() %d&lt;br /&gt;
eRoti was folded&lt;br /&gt;
Roti isn&#039;t puffy&lt;br /&gt;
Roti too thick&lt;br /&gt;
Chewy rotis&lt;br /&gt;
Small rotis&lt;br /&gt;
Unevenly cooked edges&lt;br /&gt;
There were errors&lt;br /&gt;
Rotimatic is noisy&lt;br /&gt;
Other&lt;br /&gt;
Power Saver (Recommended)&lt;br /&gt;
Standby&lt;br /&gt;
Thin&lt;br /&gt;
Medium&lt;br /&gt;
Thick&lt;br /&gt;
Light&lt;br /&gt;
Medium Well&lt;br /&gt;
Well Done&lt;br /&gt;
Do not see your Flour?&lt;br /&gt;
-Empty-&lt;br /&gt;
Change Power Settings&lt;br /&gt;
Warranty&lt;br /&gt;
About&lt;br /&gt;
General Cleaning&lt;br /&gt;
Advanced Cleaning&lt;br /&gt;
Recipe/Flour&lt;br /&gt;
Recipe Settings&lt;br /&gt;
Clean Rotimatic&lt;br /&gt;
WiFi Configuration&lt;br /&gt;
General Settings&lt;br /&gt;
Menu&lt;br /&gt;
Thickness&lt;br /&gt;
Roast Level&lt;br /&gt;
Oil &lt;br /&gt;
Main view shown&lt;br /&gt;
%s pressed&lt;br /&gt;
Making not allowed for selftest build&lt;br /&gt;
Making cannot be started now&lt;br /&gt;
Starting up...&lt;br /&gt;
Final check...&lt;br /&gt;
Warming up...&lt;br /&gt;
eCooking...&lt;br /&gt;
Pausing...&lt;br /&gt;
Use + or - and press PLAY!&lt;br /&gt;
Invalid Configuration (Status: 0x%X)&lt;br /&gt;
Device ID: 0x%X&lt;br /&gt;
MADCTL: 0x%X&lt;br /&gt;
Pixel Format: 0x%X&lt;br /&gt;
ID: 0x%X&lt;br /&gt;
!&amp;quot;##$%&amp;amp;&#039;())*+,-./12345689:;=&amp;gt;?ABDEGIJLNOQSUWYZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Plugging in the USB Thumb Drive (8GB FAT32) with &#039;&#039;&#039;update.img&#039;&#039;&#039; and mashing all the buttons then turning on yielded some tiny text &amp;lt;code&amp;gt;1.17.19/8.4937/1.2.4.73/SN:25102423&amp;lt;/code&amp;gt; in the upper left corner of the screen before failing with the typical I&#039;m too hot warning after already removing blown thermal fuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Using a FAT16 formatted (FAT32 was instructed) 512MB thumb drive with firmware update.img file inserted and device power cycled a loud long tone (about 20 seconds was generated). It sounded like a usual start beep at some point after, and the buttons responded with a tone when pushed. Pushing the power button and powering on/off a few times yielded no results. Pushing the various buttons several times generated a starting up sequence, the Thermal Fuse warning was displayed at somepoint but cleared itself. The usual self homing procedure completed and the machine was left it&#039;s functional &amp;quot;Home&amp;quot; screen. It now appears to have properly updated the firmware and be restored to a functional state. An additional capture was made of the 8MB external Flash Memory in this state.&lt;br /&gt;
&lt;br /&gt;
== ICSP / PICkit 3 ==&lt;br /&gt;
&lt;br /&gt;
Re-examing the P8 connector, it is not configured in the presumed &amp;quot;In Circuit Serial Programmer&amp;quot; (ICSP) pin ordering, or mostly maybe is?&lt;br /&gt;
&lt;br /&gt;
Was eventually able to work out that the MCU is using Pins 26 &amp;amp; 27 for Programming/Debugging&lt;br /&gt;
Communication Channel 2 and these are indeed connected to Pins 4 &amp;amp; 5 on the P8 header for PGD &amp;amp; PGC respectively, along with ground on Pin 3, MCRL (reset) Pin 1 and still a head scratcher on Pin 2 which doesn&#039;t appear to be connected to 3v3 or provide a Vdd target presence voltage. To convince MPLab there is a MCU connected I still have the Chip Clip attached to the SPI Flash Memory chip and powering the 3v3 rail via a Tigard device along with an additional 3v3 connected from their directly to Pin 2 on the PICkit 3 so it knows everything is connected and turned on.&lt;br /&gt;
&lt;br /&gt;
So this seems to leave me with a questionable task of recovering prior versions of firmware from older machines. It also lead to random threads of surely you&#039;d only be circumventing &amp;quot;Copy Protection&amp;quot; as a highfalutin Intellectual Property Thief, not to be confused with possibly curious miscreants. As far as actual firmware analysis it&#039;s a pretty moot point with binaries already in hand. Also still a bit of a suspension it&#039;s sitting on several versions of already recovered SPI Flash Memory, say around 0x00005000?&lt;br /&gt;
&lt;br /&gt;
And on that note, am I glad to be done fk&#039;n around with certain useless hackerspaces and bs drama, and just doin some damn fine hacking with literal (jumbo) shrimps on the BBQ and a quiet to properly noisy lab in the back. THANKS HACKER DOJO &amp;amp; ULTIMATE GAME NIGHT.&lt;br /&gt;
&lt;br /&gt;
The other &amp;lt;big&amp;gt;&#039;&#039;&#039;BIG&#039;&#039;&#039;&amp;lt;/big&amp;gt; insight was &#039;&#039;&#039;&amp;quot;hold the button on the PICkit 3 while plugging in the USB&amp;quot;&#039;&#039;&#039;, which puts it in &#039;&#039;&#039;&amp;quot;MPLab Mode&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now with that out of the way and the use of either Microchip MPLab X IDE or IPE we get...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*****************************************************&lt;br /&gt;
&lt;br /&gt;
Connecting to MPLAB PICkit 3...&lt;br /&gt;
&lt;br /&gt;
Currently loaded firmware on PICkit 3&lt;br /&gt;
Firmware Suite Version.....01.56.09&lt;br /&gt;
Firmware type..............PIC32MX&lt;br /&gt;
Target voltage detected&lt;br /&gt;
Target device PIC32MX470F512L found.&lt;br /&gt;
Device ID Revision = A0&lt;br /&gt;
&lt;br /&gt;
Reading...&lt;br /&gt;
&lt;br /&gt;
The following memory area(s) will be read:&lt;br /&gt;
program memory: start address = 0x1d000000, end address = 0x1d07ffff&lt;br /&gt;
boot config memory&lt;br /&gt;
configuration memory&lt;br /&gt;
The device is code protected.&lt;br /&gt;
Failed to read device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is some discussion about the &#039;&#039;&#039;The device is code protected.&#039;&#039;&#039; and &#039;&#039;&#039;Failed to read device&#039;&#039;&#039; as a failure mode when the cables are too long, or there isn&#039;t sufficient de-coupling capacitors. Also not entirely clear if it is able to read the &amp;quot;Copy Protection&amp;quot; (CP) register, or just not getting any data out. I suppose this is an improvement from the &amp;quot;Failing to connect&amp;quot; which was being caused by the programmer being in the wrong mode, not a failure to communication with the MCU.&lt;br /&gt;
&lt;br /&gt;
‡ThanX to MCMASTER of MTVRE / sliconpr0n.org for the use of their programmer/debugger.&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=277</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=277"/>
		<updated>2024-09-15T14:32:13Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Firmware */ update?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
pre-empting various babbel to follow on which wire to what. Use a suitable SPI to USB device and connect 3v3, ground, input (DQ0/CIPO), output (DQ1/COPI), Chip Select and Clock. Leave the flip&#039;n WP (W#) &amp;amp; HOLD out of it, they&#039;ve got the necessary pull-ups on the PCB and in circuit already. Also yes, you can manually power up the chip with pulling CS aka S# low, and then create a falling edge to execute &amp;quot;A&amp;quot; command, or just leave it connected to the device doing all the other work for you. Leaving the fumbling for posterity and testing of n00b&#039;z as to your potential commitment of teh &#039;RE&#039; arts. AND it totally doesn&#039;t matter if the LCD and/or Capacitive Touch are connected as long as you hold it in reset (MCLR grounded).&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump (blank/wiped?) ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post boot re-dump ===&lt;br /&gt;
&lt;br /&gt;
After looking at the size of the firmware, the configuration of the PIC32 and other factors, setup a new test to do a minimal boot. Using a chip clip and the Tigard I was able to verify 3v3 power rail, convenient LED and test points labeled 3v3. Probing a bit more was able to identify 5v LED and test point along with easily accessible pins via connection headers that are currently disconnected form their respective components. The 5v rail can be tapped from Pin 4 on PM5 and ground Pin 4 on PM1. I used the pin from another micro-controller pulled directly from the USB connection to bring up the 5v rail and the chip clip and Tigard in the previous configuration for the 3v3. Both of these power rails are isolated and able to use a common ground.&lt;br /&gt;
&lt;br /&gt;
I reconnected the LCD &amp;amp; Capcitive Touch flat flexes on the main board ZEM0021-0x and powered up the 3v3 &amp;amp; 5v and released the PIC32 MCLR from ground to disable the reset state. In this configuration there are no other connectors or power sources attached and after a few seconds you get the customer powering on beep and a blank screen. The LCD then turns on and a &amp;lt;code&amp;gt;Trouble powering on! (0x7)&amp;lt;/code&amp;gt; message is displayed, followed moments later by a continuous beep and a power cycle loop continually trying to restart itself.&lt;br /&gt;
&lt;br /&gt;
Now trying to use the previous method of reading the 8MB SPI flash, with MCLR grounded, results in no devices being detected. Disconnecting the LCD, Capacitive Touch, and 5v supply once again enumerates the SPI memory and it can be read out to a local file. This time it appears to have actual data following all zeros up to 000dffff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 458752 -n 1681 roti-b_3v&lt;br /&gt;
00070000  40 5a 80 bf 64 10 88 bf  68 10 88 bf 34 10 88 bf  |@Z..d...h...4...|&lt;br /&gt;
00070010  5c 67 50 f1 7c a2 c4 64  1b 23 00 6b 50 f1 7c c2  |\gP.|..d.#.kP.|.|&lt;br /&gt;
00070020  00 6b 70 f1 60 da 70 f1  64 c2 70 f1 65 c2 3a 18  |.kp.`.p.d.p.e.:.|&lt;br /&gt;
00070030  eb 3e 08 6c 3a 18 3d 59  08 6c 3a 18 77 7c 08 6c  |.&amp;gt;.l:.=Y.l:.w|.l|&lt;br /&gt;
00070040  05 b2 00 6c 03 6d 14 6e  0e 6f 3a 18 d0 46 04 d2  |...l.m.n.o:..F..|&lt;br /&gt;
00070050  44 64 a0 e8 80 3a 07 9d  6f 45 11 eb 0e 5b f5 64  |Dd...:..oE...[.d|&lt;br /&gt;
00070060  25 67 19 60 0f 68 8c e8  14 6c 3a 18 90 d0 04 d3  |%g.`.h...l:.....|&lt;br /&gt;
00070070  40 6c 3a 18 90 d0 0d ec  04 93 3a 18 90 d0 83 67  |@l:.......:....g|&lt;br /&gt;
00070080  07 b2 09 e2 80 a2 3a 18  90 d0 ff 49 01 48 0f 6a  |......:....I.H.j|&lt;br /&gt;
00070090  11 e9 4c e8 f5 29 75 64  a0 e8 00 65 78 21 01 a0  |..L..)ud...ex!..|&lt;br /&gt;
000700a0  e5 64 00 6a 1c 67 51 f0  40 c0 51 f0 00 48 7d 67  |.d.j.gQ.@.Q..H}g|&lt;br /&gt;
000700b0  41 c0 20 6a 50 c3 77 6a  4b ea 51 c3 04 04 0a b2  |A. jP.wjK.Q.....|&lt;br /&gt;
000700c0  00 6d 05 d0 3a 18 f4 c6  06 d2 78 6a 7d 67 4b ea  |.m..:.....xj}gK.|&lt;br /&gt;
000700d0  01 48 04 04 01 6d 05 d0  3a 18 f4 c6 51 c3 65 64  |.H...m..:...Q.ed|&lt;br /&gt;
000700e0  a0 e8 00 65 4d a3 05 9d  03 6a 4e ec c3 64 15 2c  |...eM....jN..d.,|&lt;br /&gt;
000700f0  e1 f7 1d 4a 0b b3 40 db  0b b3 80 db 0b b3 40 db  |...J..@.......@.|&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
00074000  18 6c 05 6d 3a 18 73 85  04 6e d0 f0 5c c8 63 64  |.l.m:.s..n..\.cd|&lt;br /&gt;
00074010  a0 e8 00 65 c3 64 e0 f3  08 6c 0b b5 3a 18 eb 09  |...e.d...l..:...|&lt;br /&gt;
00074020  00 6e 3a 18 71 02 00 65  3a 18 ae c1 00 65 3a 18  |.n:.q..e:....e:.|&lt;br /&gt;
00074030  a6 86 00 65 3a 18 20 ce  00 65 3a 18 16 c8 00 65  |...e:. ..e:....e|&lt;br /&gt;
00074040  43 64 a0 e8 15 00 07 9d  c3 64 0a b4 3a 18 68 cd  |Cd.......d..:.h.|&lt;br /&gt;
00074050  00 65 3a 18 52 d8 00 65  02 6c 07 b5 3a 18 eb 09  |.e:.R..e.l..:...|&lt;br /&gt;
00074060  01 6e 64 6c 05 b5 3a 18  eb 09 01 6e 43 64 a0 e8  |.ndl..:....nCd..|&lt;br /&gt;
00074070  9d 5b 07 9d 59 42 07 9d  01 19 06 9d 5c 67 30 f7  |.[..YB......\g0.|&lt;br /&gt;
00074080  70 9a 98 6a 58 eb 0a b3  12 ea e3 64 49 e3 40 f0  |p..jX......dI.@.|&lt;br /&gt;
00074090  44 aa 09 2a 3a 18 44 d0  00 00 00 00 00 00 00 00  |D..*:.D.........|&lt;br /&gt;
000740a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The zeros continue until another section starts at &amp;lt;code&amp;gt;000a0000&amp;lt;/code&amp;gt; and there is a block of strings starting around &amp;lt;code&amp;gt;000a0f20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 0x000a0f20 -n 1024 roti-b_3v&lt;br /&gt;
000a0f20  00 10 00 00 24 d5 01 9d  55 6e 64 65 66 69 6e 65  |....$...Undefine|&lt;br /&gt;
000a0f30  64 20 61 63 74 69 6f 6e  20 69 6e 20 74 68 69 73  |d action in this|&lt;br /&gt;
000a0f40  20 73 74 61 74 65 20 25  64 00 00 65 59 65 73 00  | state %d..eYes.|&lt;br /&gt;
000a0f50  4e 6f 00 00 7b 22 6f 70  63 6f 64 65 22 3a 22 62  |No..{&amp;quot;opcode&amp;quot;:&amp;quot;b|&lt;br /&gt;
000a0f60  61 74 63 68 43 6f 6d 70  6c 65 74 65 64 22 2c 22  |atchCompleted&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f70  70 61 79 6c 6f 61 64 22  3a 5b 22 25 64 22 2c 22  |payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f80  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0f90  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fa0  22 2c 22 25 64 22 2c 22  25 2e 31 66 22 2c 22 25  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fb0  2e 31 66 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0fc0  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fd0  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fe0  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a0ff0  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1000  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1010  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1020  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a1030  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a1040  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1050  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1060  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1070  2e 31 66 22 2c 22 25 2e  31 66 22 2c 22 25 2e 31  |.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1|&lt;br /&gt;
000a1080  66 22 2c 22 25 2e 31 66  22 2c 22 25 2e 31 66 22  |f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;|&lt;br /&gt;
000a1090  5d 7d 00 00 50 6f 77 65  72 20 73 65 74 74 69 6e  |]}..Power settin|&lt;br /&gt;
000a10a0  67 73 0a 69 73 20 6e 6f  74 20 73 75 70 70 6f 72  |gs.is not suppor|&lt;br /&gt;
000a10b0  74 65 64 2e 0a 49 20 61  6d 20 69 6e 20 50 72 6f  |ted..I am in Pro|&lt;br /&gt;
000a10c0  64 75 63 74 69 6f 6e 20  4d 6f 64 65 2e 00 00 65  |duction Mode...e|&lt;br /&gt;
000a10d0  50 6f 77 65 72 20 73 65  74 74 69 6e 67 73 20 69  |Power settings i|&lt;br /&gt;
000a10e0  73 20 6e 6f 74 20 73 75  70 70 6f 72 74 65 64 20  |s not supported |&lt;br /&gt;
000a10f0  28 50 52 4f 44 29 00 00  49 20 61 6d 20 61 6c 72  |(PROD)..I am alr|&lt;br /&gt;
000a1100  65 61 64 79 20 6f 70 65  72 61 74 69 6e 67 20 69  |eady operating i|&lt;br /&gt;
000a1110  6e 0a 74 68 65 20 6f 70  74 69 6d 61 6c 20 70 6f  |n.the optimal po|&lt;br /&gt;
000a1120  77 65 72 20 6d 6f 64 65  2e 00 00 65 50 6f 77 65  |wer mode...ePowe|&lt;br /&gt;
000a1130  72 20 73 65 74 74 69 6e  67 73 20 69 73 20 6e 6f  |r settings is no|&lt;br /&gt;
000a1140  74 20 73 75 70 70 6f 72  74 65 64 00 49 74 6f 72  |t supported.Itor|&lt;br /&gt;
000a1150  53 65 72 76 20 6e 6f 74  20 69 6e 20 63 6f 72 72  |Serv not in corr|&lt;br /&gt;
000a1160  65 63 74 20 73 74 61 74  65 20 28 25 75 29 00 00  |ect state (%u)..|&lt;br /&gt;
000a1170  49 27 6d 20 61 6c 72 65  61 64 79 20 63 6f 6e 6e  |I&#039;m already conn|&lt;br /&gt;
000a1180  65 63 74 65 64 0a 74 6f  20 22 25 73 22 2e 0a 44  |ected.to &amp;quot;%s&amp;quot;..D|&lt;br /&gt;
000a1190  6f 20 79 6f 75 20 77 61  6e 74 20 6d 65 20 74 6f  |o you want me to|&lt;br /&gt;
000a11a0  0a 73 77 69 74 63 68 20  74 6f 20 61 6e 6f 74 68  |.switch to anoth|&lt;br /&gt;
000a11b0  65 72 20 6e 65 74 77 6f  72 6b 3f 00 2a 00 00 65  |er network?.*..e|&lt;br /&gt;
000a11c0  25 73 2c 20 25 73 00 00  25 73 20 73 65 6c 65 63  |%s, %s..%s selec|&lt;br /&gt;
000a11d0  74 65 64 00 0a 53 74 6f  70 70 69 6e 67 20 6f 6e  |ted..Stopping on|&lt;br /&gt;
000a11e0  67 6f 69 6e 67 20 70 72  6f 63 65 73 73 2e 2e 2e  |going process...|&lt;br /&gt;
000a11f0  00 00 00 65 47 69 6d 6d  65 20 61 20 73 65 63 21  |...eGimme a sec!|&lt;br /&gt;
000a1200  00 00 00 65 49 20 61 6d  20 73 74 69 6c 6c 20 73  |...eI am still s|&lt;br /&gt;
000a1210  74 6f 70 70 69 6e 67 20  63 6f 6f 6b 69 6e 67 21  |topping cooking!|&lt;br /&gt;
000a1220  00 00 00 65 4e 6f 20 76  61 6c 69 64 20 72 65 63  |...eNo valid rec|&lt;br /&gt;
000a1230  69 70 65 73 20 66 6f 75  6e 64 20 69 6e 20 52 6f  |ipes found in Ro|&lt;br /&gt;
000a1240  74 69 6d 61 74 69 63 00  25 64 29 20 30 78 25 30  |timatic.%d) 0x%0|&lt;br /&gt;
000a1250  32 78 20 25 73 00 00 65  46 6c 6f 75 72 20 64 61  |2x %s..eFlour da|&lt;br /&gt;
000a1260  74 61 20 69 73 20 69 6e  76 61 6c 69 64 20 66 6f  |ta is invalid fo|&lt;br /&gt;
000a1270  72 20 52 65 63 69 70 65  20 25 64 20 69 6e 20 52  |r Recipe %d in R|&lt;br /&gt;
000a1280  6f 74 69 6d 61 74 69 63  00 00 00 65 44 6f 20 79  |otimatic...eDo y|&lt;br /&gt;
000a1290  6f 75 20 77 61 6e 74 20  74 6f 0a 70 6f 77 65 72  |ou want to.power|&lt;br /&gt;
000a12a0  20 6f 66 66 20 6d 61 63  68 69 6e 65 3f 00 00 65  | off machine?..e|&lt;br /&gt;
000a12b0  44 6f 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 70  |Do you want to p|&lt;br /&gt;
000a12c0  6f 77 65 72 20 6f 66 66  20 6d 61 63 68 69 6e 65  |ower off machine|&lt;br /&gt;
000a12d0  3f 00 00 65 50 69 7a 7a  61 20 62 61 73 65 20 69  |?..ePizza base i|&lt;br /&gt;
000a12e0  73 20 6f 6e 20 74 68 65  20 68 6f 74 20 70 61 6e  |s on the hot pan|&lt;br /&gt;
000a12f0  73 2c 20 70 6c 65 61 73  65 0a 70 69 63 6b 20 69  |s, please.pick i|&lt;br /&gt;
000a1300  74 20 75 70 20 69 6d 6d  65 64 69 61 74 65 6c 79  |t up immediately|&lt;br /&gt;
000a1310  20 74 6f 20 61 76 6f 69  64 0a 6f 76 65 72 63 6f  | to avoid.overco|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extracting all the ASCII strings yields this list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
e(%d[%dms]-&amp;gt;%d[%dms]) x %d -&amp;gt; %d&lt;br /&gt;
update.img&lt;br /&gt;
Front Door state changed: %d&lt;br /&gt;
Kneader Door state changed: %d&lt;br /&gt;
Undefined action in this state %d&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;batchCompleted&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;]}&lt;br /&gt;
Power settings is not supported.&lt;br /&gt;
I am in Production Mode.&lt;br /&gt;
Power settings is not supported (PROD)&lt;br /&gt;
I am already operating in the optimal power mode.&lt;br /&gt;
Power settings is not supported&lt;br /&gt;
ItorServ not in correct state (%u)&lt;br /&gt;
I&#039;m already connected to &amp;quot;%s&amp;quot;.&lt;br /&gt;
Do you want me to switch to another network?&lt;br /&gt;
Stopping ongoing process...&lt;br /&gt;
Gimme a sec!&lt;br /&gt;
I am still stopping cooking!&lt;br /&gt;
No valid recipes found in Rotimatic&lt;br /&gt;
Flour data is invalid for Recipe %d in Rotimatic&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Pizza base is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
Puri disc is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
%s-out notification shown&lt;br /&gt;
Do you want to stop making %s?&lt;br /&gt;
Do you want to stop making?&lt;br /&gt;
Do you want to start making %s?&lt;br /&gt;
Do you want to start making?&lt;br /&gt;
Make sure flour container is full. Start making?&lt;br /&gt;
Make sure water container is full. Start making?&lt;br /&gt;
Started making %s&lt;br /&gt;
DBG_ASSERT(): %s:%d.&lt;br /&gt;
No valid recipes found&lt;br /&gt;
Selection (%d) &amp;gt;= RecipeCount (%d)&lt;br /&gt;
Selection (%d) &amp;gt;= FlourCount (%d)&lt;br /&gt;
Roast level cannot be changed&lt;br /&gt;
2 Drops&lt;br /&gt;
1 Drop&lt;br /&gt;
Oil level cannot be changed&lt;br /&gt;
This app provides tips and support.&lt;br /&gt;
What do you want to cook?&lt;br /&gt;
Skip&lt;br /&gt;
Pipe cleaning. Help screen shown&lt;br /&gt;
Pipe cleaning. Resume screen shown&lt;br /&gt;
Pipe Sanitize step %u, %u&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;feedback&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;]}&lt;br /&gt;
DecDB() %d&lt;br /&gt;
IncRoti() %d&lt;br /&gt;
eRoti was folded&lt;br /&gt;
Roti isn&#039;t puffy&lt;br /&gt;
Roti too thick&lt;br /&gt;
Chewy rotis&lt;br /&gt;
Small rotis&lt;br /&gt;
Unevenly cooked edges&lt;br /&gt;
There were errors&lt;br /&gt;
Rotimatic is noisy&lt;br /&gt;
Other&lt;br /&gt;
Power Saver (Recommended)&lt;br /&gt;
Standby&lt;br /&gt;
Thin&lt;br /&gt;
Medium&lt;br /&gt;
Thick&lt;br /&gt;
Light&lt;br /&gt;
Medium Well&lt;br /&gt;
Well Done&lt;br /&gt;
Do not see your Flour?&lt;br /&gt;
-Empty-&lt;br /&gt;
Change Power Settings&lt;br /&gt;
Warranty&lt;br /&gt;
About&lt;br /&gt;
General Cleaning&lt;br /&gt;
Advanced Cleaning&lt;br /&gt;
Recipe/Flour&lt;br /&gt;
Recipe Settings&lt;br /&gt;
Clean Rotimatic&lt;br /&gt;
WiFi Configuration&lt;br /&gt;
General Settings&lt;br /&gt;
Menu&lt;br /&gt;
Thickness&lt;br /&gt;
Roast Level&lt;br /&gt;
Oil &lt;br /&gt;
Main view shown&lt;br /&gt;
%s pressed&lt;br /&gt;
Making not allowed for selftest build&lt;br /&gt;
Making cannot be started now&lt;br /&gt;
Starting up...&lt;br /&gt;
Final check...&lt;br /&gt;
Warming up...&lt;br /&gt;
eCooking...&lt;br /&gt;
Pausing...&lt;br /&gt;
Use + or - and press PLAY!&lt;br /&gt;
Invalid Configuration (Status: 0x%X)&lt;br /&gt;
Device ID: 0x%X&lt;br /&gt;
MADCTL: 0x%X&lt;br /&gt;
Pixel Format: 0x%X&lt;br /&gt;
ID: 0x%X&lt;br /&gt;
!&amp;quot;##$%&amp;amp;&#039;())*+,-./12345689:;=&amp;gt;?ABDEGIJLNOQSUWYZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Plugging in the USB Thumb Drive with &#039;&#039;&#039;update.img&#039;&#039;&#039; and mashing all the buttons then turning on yielded some tiny text &amp;lt;code&amp;gt;1.17.19/8.4937/1.2.4.73/SN:25102423&amp;lt;/code&amp;gt; in the upper left corner of the screen before failing with the typical I&#039;m too hot warning after already removing blown thermal fuse.&lt;br /&gt;
&lt;br /&gt;
== ICSP / PICkit 3 ==&lt;br /&gt;
&lt;br /&gt;
Re-examing the P8 connector, it is not configured in the presumed &amp;quot;In Circuit Serial Programmer&amp;quot; (ICSP) pin ordering, or mostly maybe is?&lt;br /&gt;
&lt;br /&gt;
Was eventually able to work out that the MCU is using Pins 26 &amp;amp; 27 for Programming/Debugging&lt;br /&gt;
Communication Channel 2 and these are indeed connected to Pins 4 &amp;amp; 5 on the P8 header for PGD &amp;amp; PGC respectively, along with ground on Pin 3, MCRL (reset) Pin 1 and still a head scratcher on Pin 2 which doesn&#039;t appear to be connected to 3v3 or provide a Vdd target presence voltage. To convince MPLab there is a MCU connected I still have the Chip Clip attached to the SPI Flash Memory chip and powering the 3v3 rail via a Tigard device along with an additional 3v3 connected from their directly to Pin 2 on the PICkit 3 so it knows everything is connected and turned on.&lt;br /&gt;
&lt;br /&gt;
So this seems to leave me with a questionable task of recovering prior versions of firmware from older machines. It also lead to random threads of surely you&#039;d only be circumventing &amp;quot;Copy Protection&amp;quot; as a highfalutin Intellectual Property Thief, not to be confused with possibly curious miscreants. As far as actual firmware analysis it&#039;s a pretty moot point with binaries already in hand. Also still a bit of a suspension it&#039;s sitting on several versions of already recovered SPI Flash Memory, say around 0x00005000?&lt;br /&gt;
&lt;br /&gt;
And on that note, am I glad to be done fk&#039;n around with certain useless hackerspaces and bs drama, and just doin some damn fine hacking with literal (jumbo) shrimps on the BBQ and a quiet to properly noisy lab in the back. THANKS HACKER DOJO &amp;amp; ULTIMATE GAME NIGHT.&lt;br /&gt;
&lt;br /&gt;
The other &amp;lt;big&amp;gt;&#039;&#039;&#039;BIG&#039;&#039;&#039;&amp;lt;/big&amp;gt; insight was &#039;&#039;&#039;&amp;quot;hold the button on the PICkit 3 while plugging in the USB&amp;quot;&#039;&#039;&#039;, which puts it in &#039;&#039;&#039;&amp;quot;MPLab Mode&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now with that out of the way and the use of either Microchip MPLab X IDE or IPE we get...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*****************************************************&lt;br /&gt;
&lt;br /&gt;
Connecting to MPLAB PICkit 3...&lt;br /&gt;
&lt;br /&gt;
Currently loaded firmware on PICkit 3&lt;br /&gt;
Firmware Suite Version.....01.56.09&lt;br /&gt;
Firmware type..............PIC32MX&lt;br /&gt;
Target voltage detected&lt;br /&gt;
Target device PIC32MX470F512L found.&lt;br /&gt;
Device ID Revision = A0&lt;br /&gt;
&lt;br /&gt;
Reading...&lt;br /&gt;
&lt;br /&gt;
The following memory area(s) will be read:&lt;br /&gt;
program memory: start address = 0x1d000000, end address = 0x1d07ffff&lt;br /&gt;
boot config memory&lt;br /&gt;
configuration memory&lt;br /&gt;
The device is code protected.&lt;br /&gt;
Failed to read device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is some discussion about the &#039;&#039;&#039;The device is code protected.&#039;&#039;&#039; and &#039;&#039;&#039;Failed to read device&#039;&#039;&#039; as a failure mode when the cables are too long, or there isn&#039;t sufficient de-coupling capacitors. Also not entirely clear if it is able to read the &amp;quot;Copy Protection&amp;quot; (CP) register, or just not getting any data out. I suppose this is an improvement from the &amp;quot;Failing to connect&amp;quot; which was being caused by the programmer being in the wrong mode, not a failure to communication with the MCU.&lt;br /&gt;
&lt;br /&gt;
‡ThanX to MCMASTER of MTVRE / sliconpr0n.org for the use of their programmer/debugger.&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=276</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=276"/>
		<updated>2024-09-15T14:11:33Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* SPI dump */ anti-rant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
pre-empting various babbel to follow on which wire to what. Use a suitable SPI to USB device and connect 3v3, ground, input (DQ0/CIPO), output (DQ1/COPI), Chip Select and Clock. Leave the flip&#039;n WP (W#) &amp;amp; HOLD out of it, they&#039;ve got the necessary pull-ups on the PCB and in circuit already. Also yes, you can manually power up the chip with pulling CS aka S# low, and then create a falling edge to execute &amp;quot;A&amp;quot; command, or just leave it connected to the device doing all the other work for you. Leaving the fumbling for posterity and testing of n00b&#039;z as to your potential commitment of teh &#039;RE&#039; arts. AND it totally doesn&#039;t matter if the LCD and/or Capacitive Touch are connected as long as you hold it in reset (MCLR grounded).&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump (blank/wiped?) ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post boot re-dump ===&lt;br /&gt;
&lt;br /&gt;
After looking at the size of the firmware, the configuration of the PIC32 and other factors, setup a new test to do a minimal boot. Using a chip clip and the Tigard I was able to verify 3v3 power rail, convenient LED and test points labeled 3v3. Probing a bit more was able to identify 5v LED and test point along with easily accessible pins via connection headers that are currently disconnected form their respective components. The 5v rail can be tapped from Pin 4 on PM5 and ground Pin 4 on PM1. I used the pin from another micro-controller pulled directly from the USB connection to bring up the 5v rail and the chip clip and Tigard in the previous configuration for the 3v3. Both of these power rails are isolated and able to use a common ground.&lt;br /&gt;
&lt;br /&gt;
I reconnected the LCD &amp;amp; Capcitive Touch flat flexes on the main board ZEM0021-0x and powered up the 3v3 &amp;amp; 5v and released the PIC32 MCLR from ground to disable the reset state. In this configuration there are no other connectors or power sources attached and after a few seconds you get the customer powering on beep and a blank screen. The LCD then turns on and a &amp;lt;code&amp;gt;Trouble powering on! (0x7)&amp;lt;/code&amp;gt; message is displayed, followed moments later by a continuous beep and a power cycle loop continually trying to restart itself.&lt;br /&gt;
&lt;br /&gt;
Now trying to use the previous method of reading the 8MB SPI flash, with MCLR grounded, results in no devices being detected. Disconnecting the LCD, Capacitive Touch, and 5v supply once again enumerates the SPI memory and it can be read out to a local file. This time it appears to have actual data following all zeros up to 000dffff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 458752 -n 1681 roti-b_3v&lt;br /&gt;
00070000  40 5a 80 bf 64 10 88 bf  68 10 88 bf 34 10 88 bf  |@Z..d...h...4...|&lt;br /&gt;
00070010  5c 67 50 f1 7c a2 c4 64  1b 23 00 6b 50 f1 7c c2  |\gP.|..d.#.kP.|.|&lt;br /&gt;
00070020  00 6b 70 f1 60 da 70 f1  64 c2 70 f1 65 c2 3a 18  |.kp.`.p.d.p.e.:.|&lt;br /&gt;
00070030  eb 3e 08 6c 3a 18 3d 59  08 6c 3a 18 77 7c 08 6c  |.&amp;gt;.l:.=Y.l:.w|.l|&lt;br /&gt;
00070040  05 b2 00 6c 03 6d 14 6e  0e 6f 3a 18 d0 46 04 d2  |...l.m.n.o:..F..|&lt;br /&gt;
00070050  44 64 a0 e8 80 3a 07 9d  6f 45 11 eb 0e 5b f5 64  |Dd...:..oE...[.d|&lt;br /&gt;
00070060  25 67 19 60 0f 68 8c e8  14 6c 3a 18 90 d0 04 d3  |%g.`.h...l:.....|&lt;br /&gt;
00070070  40 6c 3a 18 90 d0 0d ec  04 93 3a 18 90 d0 83 67  |@l:.......:....g|&lt;br /&gt;
00070080  07 b2 09 e2 80 a2 3a 18  90 d0 ff 49 01 48 0f 6a  |......:....I.H.j|&lt;br /&gt;
00070090  11 e9 4c e8 f5 29 75 64  a0 e8 00 65 78 21 01 a0  |..L..)ud...ex!..|&lt;br /&gt;
000700a0  e5 64 00 6a 1c 67 51 f0  40 c0 51 f0 00 48 7d 67  |.d.j.gQ.@.Q..H}g|&lt;br /&gt;
000700b0  41 c0 20 6a 50 c3 77 6a  4b ea 51 c3 04 04 0a b2  |A. jP.wjK.Q.....|&lt;br /&gt;
000700c0  00 6d 05 d0 3a 18 f4 c6  06 d2 78 6a 7d 67 4b ea  |.m..:.....xj}gK.|&lt;br /&gt;
000700d0  01 48 04 04 01 6d 05 d0  3a 18 f4 c6 51 c3 65 64  |.H...m..:...Q.ed|&lt;br /&gt;
000700e0  a0 e8 00 65 4d a3 05 9d  03 6a 4e ec c3 64 15 2c  |...eM....jN..d.,|&lt;br /&gt;
000700f0  e1 f7 1d 4a 0b b3 40 db  0b b3 80 db 0b b3 40 db  |...J..@.......@.|&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
00074000  18 6c 05 6d 3a 18 73 85  04 6e d0 f0 5c c8 63 64  |.l.m:.s..n..\.cd|&lt;br /&gt;
00074010  a0 e8 00 65 c3 64 e0 f3  08 6c 0b b5 3a 18 eb 09  |...e.d...l..:...|&lt;br /&gt;
00074020  00 6e 3a 18 71 02 00 65  3a 18 ae c1 00 65 3a 18  |.n:.q..e:....e:.|&lt;br /&gt;
00074030  a6 86 00 65 3a 18 20 ce  00 65 3a 18 16 c8 00 65  |...e:. ..e:....e|&lt;br /&gt;
00074040  43 64 a0 e8 15 00 07 9d  c3 64 0a b4 3a 18 68 cd  |Cd.......d..:.h.|&lt;br /&gt;
00074050  00 65 3a 18 52 d8 00 65  02 6c 07 b5 3a 18 eb 09  |.e:.R..e.l..:...|&lt;br /&gt;
00074060  01 6e 64 6c 05 b5 3a 18  eb 09 01 6e 43 64 a0 e8  |.ndl..:....nCd..|&lt;br /&gt;
00074070  9d 5b 07 9d 59 42 07 9d  01 19 06 9d 5c 67 30 f7  |.[..YB......\g0.|&lt;br /&gt;
00074080  70 9a 98 6a 58 eb 0a b3  12 ea e3 64 49 e3 40 f0  |p..jX......dI.@.|&lt;br /&gt;
00074090  44 aa 09 2a 3a 18 44 d0  00 00 00 00 00 00 00 00  |D..*:.D.........|&lt;br /&gt;
000740a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The zeros continue until another section starts at &amp;lt;code&amp;gt;000a0000&amp;lt;/code&amp;gt; and there is a block of strings starting around &amp;lt;code&amp;gt;000a0f20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 0x000a0f20 -n 1024 roti-b_3v&lt;br /&gt;
000a0f20  00 10 00 00 24 d5 01 9d  55 6e 64 65 66 69 6e 65  |....$...Undefine|&lt;br /&gt;
000a0f30  64 20 61 63 74 69 6f 6e  20 69 6e 20 74 68 69 73  |d action in this|&lt;br /&gt;
000a0f40  20 73 74 61 74 65 20 25  64 00 00 65 59 65 73 00  | state %d..eYes.|&lt;br /&gt;
000a0f50  4e 6f 00 00 7b 22 6f 70  63 6f 64 65 22 3a 22 62  |No..{&amp;quot;opcode&amp;quot;:&amp;quot;b|&lt;br /&gt;
000a0f60  61 74 63 68 43 6f 6d 70  6c 65 74 65 64 22 2c 22  |atchCompleted&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f70  70 61 79 6c 6f 61 64 22  3a 5b 22 25 64 22 2c 22  |payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f80  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0f90  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fa0  22 2c 22 25 64 22 2c 22  25 2e 31 66 22 2c 22 25  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fb0  2e 31 66 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0fc0  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fd0  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fe0  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a0ff0  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1000  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1010  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1020  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a1030  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a1040  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1050  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1060  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1070  2e 31 66 22 2c 22 25 2e  31 66 22 2c 22 25 2e 31  |.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1|&lt;br /&gt;
000a1080  66 22 2c 22 25 2e 31 66  22 2c 22 25 2e 31 66 22  |f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;|&lt;br /&gt;
000a1090  5d 7d 00 00 50 6f 77 65  72 20 73 65 74 74 69 6e  |]}..Power settin|&lt;br /&gt;
000a10a0  67 73 0a 69 73 20 6e 6f  74 20 73 75 70 70 6f 72  |gs.is not suppor|&lt;br /&gt;
000a10b0  74 65 64 2e 0a 49 20 61  6d 20 69 6e 20 50 72 6f  |ted..I am in Pro|&lt;br /&gt;
000a10c0  64 75 63 74 69 6f 6e 20  4d 6f 64 65 2e 00 00 65  |duction Mode...e|&lt;br /&gt;
000a10d0  50 6f 77 65 72 20 73 65  74 74 69 6e 67 73 20 69  |Power settings i|&lt;br /&gt;
000a10e0  73 20 6e 6f 74 20 73 75  70 70 6f 72 74 65 64 20  |s not supported |&lt;br /&gt;
000a10f0  28 50 52 4f 44 29 00 00  49 20 61 6d 20 61 6c 72  |(PROD)..I am alr|&lt;br /&gt;
000a1100  65 61 64 79 20 6f 70 65  72 61 74 69 6e 67 20 69  |eady operating i|&lt;br /&gt;
000a1110  6e 0a 74 68 65 20 6f 70  74 69 6d 61 6c 20 70 6f  |n.the optimal po|&lt;br /&gt;
000a1120  77 65 72 20 6d 6f 64 65  2e 00 00 65 50 6f 77 65  |wer mode...ePowe|&lt;br /&gt;
000a1130  72 20 73 65 74 74 69 6e  67 73 20 69 73 20 6e 6f  |r settings is no|&lt;br /&gt;
000a1140  74 20 73 75 70 70 6f 72  74 65 64 00 49 74 6f 72  |t supported.Itor|&lt;br /&gt;
000a1150  53 65 72 76 20 6e 6f 74  20 69 6e 20 63 6f 72 72  |Serv not in corr|&lt;br /&gt;
000a1160  65 63 74 20 73 74 61 74  65 20 28 25 75 29 00 00  |ect state (%u)..|&lt;br /&gt;
000a1170  49 27 6d 20 61 6c 72 65  61 64 79 20 63 6f 6e 6e  |I&#039;m already conn|&lt;br /&gt;
000a1180  65 63 74 65 64 0a 74 6f  20 22 25 73 22 2e 0a 44  |ected.to &amp;quot;%s&amp;quot;..D|&lt;br /&gt;
000a1190  6f 20 79 6f 75 20 77 61  6e 74 20 6d 65 20 74 6f  |o you want me to|&lt;br /&gt;
000a11a0  0a 73 77 69 74 63 68 20  74 6f 20 61 6e 6f 74 68  |.switch to anoth|&lt;br /&gt;
000a11b0  65 72 20 6e 65 74 77 6f  72 6b 3f 00 2a 00 00 65  |er network?.*..e|&lt;br /&gt;
000a11c0  25 73 2c 20 25 73 00 00  25 73 20 73 65 6c 65 63  |%s, %s..%s selec|&lt;br /&gt;
000a11d0  74 65 64 00 0a 53 74 6f  70 70 69 6e 67 20 6f 6e  |ted..Stopping on|&lt;br /&gt;
000a11e0  67 6f 69 6e 67 20 70 72  6f 63 65 73 73 2e 2e 2e  |going process...|&lt;br /&gt;
000a11f0  00 00 00 65 47 69 6d 6d  65 20 61 20 73 65 63 21  |...eGimme a sec!|&lt;br /&gt;
000a1200  00 00 00 65 49 20 61 6d  20 73 74 69 6c 6c 20 73  |...eI am still s|&lt;br /&gt;
000a1210  74 6f 70 70 69 6e 67 20  63 6f 6f 6b 69 6e 67 21  |topping cooking!|&lt;br /&gt;
000a1220  00 00 00 65 4e 6f 20 76  61 6c 69 64 20 72 65 63  |...eNo valid rec|&lt;br /&gt;
000a1230  69 70 65 73 20 66 6f 75  6e 64 20 69 6e 20 52 6f  |ipes found in Ro|&lt;br /&gt;
000a1240  74 69 6d 61 74 69 63 00  25 64 29 20 30 78 25 30  |timatic.%d) 0x%0|&lt;br /&gt;
000a1250  32 78 20 25 73 00 00 65  46 6c 6f 75 72 20 64 61  |2x %s..eFlour da|&lt;br /&gt;
000a1260  74 61 20 69 73 20 69 6e  76 61 6c 69 64 20 66 6f  |ta is invalid fo|&lt;br /&gt;
000a1270  72 20 52 65 63 69 70 65  20 25 64 20 69 6e 20 52  |r Recipe %d in R|&lt;br /&gt;
000a1280  6f 74 69 6d 61 74 69 63  00 00 00 65 44 6f 20 79  |otimatic...eDo y|&lt;br /&gt;
000a1290  6f 75 20 77 61 6e 74 20  74 6f 0a 70 6f 77 65 72  |ou want to.power|&lt;br /&gt;
000a12a0  20 6f 66 66 20 6d 61 63  68 69 6e 65 3f 00 00 65  | off machine?..e|&lt;br /&gt;
000a12b0  44 6f 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 70  |Do you want to p|&lt;br /&gt;
000a12c0  6f 77 65 72 20 6f 66 66  20 6d 61 63 68 69 6e 65  |ower off machine|&lt;br /&gt;
000a12d0  3f 00 00 65 50 69 7a 7a  61 20 62 61 73 65 20 69  |?..ePizza base i|&lt;br /&gt;
000a12e0  73 20 6f 6e 20 74 68 65  20 68 6f 74 20 70 61 6e  |s on the hot pan|&lt;br /&gt;
000a12f0  73 2c 20 70 6c 65 61 73  65 0a 70 69 63 6b 20 69  |s, please.pick i|&lt;br /&gt;
000a1300  74 20 75 70 20 69 6d 6d  65 64 69 61 74 65 6c 79  |t up immediately|&lt;br /&gt;
000a1310  20 74 6f 20 61 76 6f 69  64 0a 6f 76 65 72 63 6f  | to avoid.overco|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extracting all the ASCII strings yields this list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
e(%d[%dms]-&amp;gt;%d[%dms]) x %d -&amp;gt; %d&lt;br /&gt;
update.img&lt;br /&gt;
Front Door state changed: %d&lt;br /&gt;
Kneader Door state changed: %d&lt;br /&gt;
Undefined action in this state %d&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;batchCompleted&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;]}&lt;br /&gt;
Power settings is not supported.&lt;br /&gt;
I am in Production Mode.&lt;br /&gt;
Power settings is not supported (PROD)&lt;br /&gt;
I am already operating in the optimal power mode.&lt;br /&gt;
Power settings is not supported&lt;br /&gt;
ItorServ not in correct state (%u)&lt;br /&gt;
I&#039;m already connected to &amp;quot;%s&amp;quot;.&lt;br /&gt;
Do you want me to switch to another network?&lt;br /&gt;
Stopping ongoing process...&lt;br /&gt;
Gimme a sec!&lt;br /&gt;
I am still stopping cooking!&lt;br /&gt;
No valid recipes found in Rotimatic&lt;br /&gt;
Flour data is invalid for Recipe %d in Rotimatic&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Pizza base is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
Puri disc is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
%s-out notification shown&lt;br /&gt;
Do you want to stop making %s?&lt;br /&gt;
Do you want to stop making?&lt;br /&gt;
Do you want to start making %s?&lt;br /&gt;
Do you want to start making?&lt;br /&gt;
Make sure flour container is full. Start making?&lt;br /&gt;
Make sure water container is full. Start making?&lt;br /&gt;
Started making %s&lt;br /&gt;
DBG_ASSERT(): %s:%d.&lt;br /&gt;
No valid recipes found&lt;br /&gt;
Selection (%d) &amp;gt;= RecipeCount (%d)&lt;br /&gt;
Selection (%d) &amp;gt;= FlourCount (%d)&lt;br /&gt;
Roast level cannot be changed&lt;br /&gt;
2 Drops&lt;br /&gt;
1 Drop&lt;br /&gt;
Oil level cannot be changed&lt;br /&gt;
This app provides tips and support.&lt;br /&gt;
What do you want to cook?&lt;br /&gt;
Skip&lt;br /&gt;
Pipe cleaning. Help screen shown&lt;br /&gt;
Pipe cleaning. Resume screen shown&lt;br /&gt;
Pipe Sanitize step %u, %u&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;feedback&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;]}&lt;br /&gt;
DecDB() %d&lt;br /&gt;
IncRoti() %d&lt;br /&gt;
eRoti was folded&lt;br /&gt;
Roti isn&#039;t puffy&lt;br /&gt;
Roti too thick&lt;br /&gt;
Chewy rotis&lt;br /&gt;
Small rotis&lt;br /&gt;
Unevenly cooked edges&lt;br /&gt;
There were errors&lt;br /&gt;
Rotimatic is noisy&lt;br /&gt;
Other&lt;br /&gt;
Power Saver (Recommended)&lt;br /&gt;
Standby&lt;br /&gt;
Thin&lt;br /&gt;
Medium&lt;br /&gt;
Thick&lt;br /&gt;
Light&lt;br /&gt;
Medium Well&lt;br /&gt;
Well Done&lt;br /&gt;
Do not see your Flour?&lt;br /&gt;
-Empty-&lt;br /&gt;
Change Power Settings&lt;br /&gt;
Warranty&lt;br /&gt;
About&lt;br /&gt;
General Cleaning&lt;br /&gt;
Advanced Cleaning&lt;br /&gt;
Recipe/Flour&lt;br /&gt;
Recipe Settings&lt;br /&gt;
Clean Rotimatic&lt;br /&gt;
WiFi Configuration&lt;br /&gt;
General Settings&lt;br /&gt;
Menu&lt;br /&gt;
Thickness&lt;br /&gt;
Roast Level&lt;br /&gt;
Oil &lt;br /&gt;
Main view shown&lt;br /&gt;
%s pressed&lt;br /&gt;
Making not allowed for selftest build&lt;br /&gt;
Making cannot be started now&lt;br /&gt;
Starting up...&lt;br /&gt;
Final check...&lt;br /&gt;
Warming up...&lt;br /&gt;
eCooking...&lt;br /&gt;
Pausing...&lt;br /&gt;
Use + or - and press PLAY!&lt;br /&gt;
Invalid Configuration (Status: 0x%X)&lt;br /&gt;
Device ID: 0x%X&lt;br /&gt;
MADCTL: 0x%X&lt;br /&gt;
Pixel Format: 0x%X&lt;br /&gt;
ID: 0x%X&lt;br /&gt;
!&amp;quot;##$%&amp;amp;&#039;())*+,-./12345689:;=&amp;gt;?ABDEGIJLNOQSUWYZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ICSP / PICkit 3 ==&lt;br /&gt;
&lt;br /&gt;
Re-examing the P8 connector, it is not configured in the presumed &amp;quot;In Circuit Serial Programmer&amp;quot; (ICSP) pin ordering, or mostly maybe is?&lt;br /&gt;
&lt;br /&gt;
Was eventually able to work out that the MCU is using Pins 26 &amp;amp; 27 for Programming/Debugging&lt;br /&gt;
Communication Channel 2 and these are indeed connected to Pins 4 &amp;amp; 5 on the P8 header for PGD &amp;amp; PGC respectively, along with ground on Pin 3, MCRL (reset) Pin 1 and still a head scratcher on Pin 2 which doesn&#039;t appear to be connected to 3v3 or provide a Vdd target presence voltage. To convince MPLab there is a MCU connected I still have the Chip Clip attached to the SPI Flash Memory chip and powering the 3v3 rail via a Tigard device along with an additional 3v3 connected from their directly to Pin 2 on the PICkit 3 so it knows everything is connected and turned on.&lt;br /&gt;
&lt;br /&gt;
So this seems to leave me with a questionable task of recovering prior versions of firmware from older machines. It also lead to random threads of surely you&#039;d only be circumventing &amp;quot;Copy Protection&amp;quot; as a highfalutin Intellectual Property Thief, not to be confused with possibly curious miscreants. As far as actual firmware analysis it&#039;s a pretty moot point with binaries already in hand. Also still a bit of a suspension it&#039;s sitting on several versions of already recovered SPI Flash Memory, say around 0x00005000?&lt;br /&gt;
&lt;br /&gt;
And on that note, am I glad to be done fk&#039;n around with certain useless hackerspaces and bs drama, and just doin some damn fine hacking with literal (jumbo) shrimps on the BBQ and a quiet to properly noisy lab in the back. THANKS HACKER DOJO &amp;amp; ULTIMATE GAME NIGHT.&lt;br /&gt;
&lt;br /&gt;
The other &amp;lt;big&amp;gt;&#039;&#039;&#039;BIG&#039;&#039;&#039;&amp;lt;/big&amp;gt; insight was &#039;&#039;&#039;&amp;quot;hold the button on the PICkit 3 while plugging in the USB&amp;quot;&#039;&#039;&#039;, which puts it in &#039;&#039;&#039;&amp;quot;MPLab Mode&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now with that out of the way and the use of either Microchip MPLab X IDE or IPE we get...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*****************************************************&lt;br /&gt;
&lt;br /&gt;
Connecting to MPLAB PICkit 3...&lt;br /&gt;
&lt;br /&gt;
Currently loaded firmware on PICkit 3&lt;br /&gt;
Firmware Suite Version.....01.56.09&lt;br /&gt;
Firmware type..............PIC32MX&lt;br /&gt;
Target voltage detected&lt;br /&gt;
Target device PIC32MX470F512L found.&lt;br /&gt;
Device ID Revision = A0&lt;br /&gt;
&lt;br /&gt;
Reading...&lt;br /&gt;
&lt;br /&gt;
The following memory area(s) will be read:&lt;br /&gt;
program memory: start address = 0x1d000000, end address = 0x1d07ffff&lt;br /&gt;
boot config memory&lt;br /&gt;
configuration memory&lt;br /&gt;
The device is code protected.&lt;br /&gt;
Failed to read device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is some discussion about the &#039;&#039;&#039;The device is code protected.&#039;&#039;&#039; and &#039;&#039;&#039;Failed to read device&#039;&#039;&#039; as a failure mode when the cables are too long, or there isn&#039;t sufficient de-coupling capacitors. Also not entirely clear if it is able to read the &amp;quot;Copy Protection&amp;quot; (CP) register, or just not getting any data out. I suppose this is an improvement from the &amp;quot;Failing to connect&amp;quot; which was being caused by the programmer being in the wrong mode, not a failure to communication with the MCU.&lt;br /&gt;
&lt;br /&gt;
‡ThanX to MCMASTER of MTVRE / sliconpr0n.org for the use of their programmer/debugger.&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=275</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=275"/>
		<updated>2024-09-15T14:02:16Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Firmware */ &amp;amp; ICSP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump (blank/wiped?) ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post boot re-dump ===&lt;br /&gt;
&lt;br /&gt;
After looking at the size of the firmware, the configuration of the PIC32 and other factors, setup a new test to do a minimal boot. Using a chip clip and the Tigard I was able to verify 3v3 power rail, convenient LED and test points labeled 3v3. Probing a bit more was able to identify 5v LED and test point along with easily accessible pins via connection headers that are currently disconnected form their respective components. The 5v rail can be tapped from Pin 4 on PM5 and ground Pin 4 on PM1. I used the pin from another micro-controller pulled directly from the USB connection to bring up the 5v rail and the chip clip and Tigard in the previous configuration for the 3v3. Both of these power rails are isolated and able to use a common ground.&lt;br /&gt;
&lt;br /&gt;
I reconnected the LCD &amp;amp; Capcitive Touch flat flexes on the main board ZEM0021-0x and powered up the 3v3 &amp;amp; 5v and released the PIC32 MCLR from ground to disable the reset state. In this configuration there are no other connectors or power sources attached and after a few seconds you get the customer powering on beep and a blank screen. The LCD then turns on and a &amp;lt;code&amp;gt;Trouble powering on! (0x7)&amp;lt;/code&amp;gt; message is displayed, followed moments later by a continuous beep and a power cycle loop continually trying to restart itself.&lt;br /&gt;
&lt;br /&gt;
Now trying to use the previous method of reading the 8MB SPI flash, with MCLR grounded, results in no devices being detected. Disconnecting the LCD, Capacitive Touch, and 5v supply once again enumerates the SPI memory and it can be read out to a local file. This time it appears to have actual data following all zeros up to 000dffff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 458752 -n 1681 roti-b_3v&lt;br /&gt;
00070000  40 5a 80 bf 64 10 88 bf  68 10 88 bf 34 10 88 bf  |@Z..d...h...4...|&lt;br /&gt;
00070010  5c 67 50 f1 7c a2 c4 64  1b 23 00 6b 50 f1 7c c2  |\gP.|..d.#.kP.|.|&lt;br /&gt;
00070020  00 6b 70 f1 60 da 70 f1  64 c2 70 f1 65 c2 3a 18  |.kp.`.p.d.p.e.:.|&lt;br /&gt;
00070030  eb 3e 08 6c 3a 18 3d 59  08 6c 3a 18 77 7c 08 6c  |.&amp;gt;.l:.=Y.l:.w|.l|&lt;br /&gt;
00070040  05 b2 00 6c 03 6d 14 6e  0e 6f 3a 18 d0 46 04 d2  |...l.m.n.o:..F..|&lt;br /&gt;
00070050  44 64 a0 e8 80 3a 07 9d  6f 45 11 eb 0e 5b f5 64  |Dd...:..oE...[.d|&lt;br /&gt;
00070060  25 67 19 60 0f 68 8c e8  14 6c 3a 18 90 d0 04 d3  |%g.`.h...l:.....|&lt;br /&gt;
00070070  40 6c 3a 18 90 d0 0d ec  04 93 3a 18 90 d0 83 67  |@l:.......:....g|&lt;br /&gt;
00070080  07 b2 09 e2 80 a2 3a 18  90 d0 ff 49 01 48 0f 6a  |......:....I.H.j|&lt;br /&gt;
00070090  11 e9 4c e8 f5 29 75 64  a0 e8 00 65 78 21 01 a0  |..L..)ud...ex!..|&lt;br /&gt;
000700a0  e5 64 00 6a 1c 67 51 f0  40 c0 51 f0 00 48 7d 67  |.d.j.gQ.@.Q..H}g|&lt;br /&gt;
000700b0  41 c0 20 6a 50 c3 77 6a  4b ea 51 c3 04 04 0a b2  |A. jP.wjK.Q.....|&lt;br /&gt;
000700c0  00 6d 05 d0 3a 18 f4 c6  06 d2 78 6a 7d 67 4b ea  |.m..:.....xj}gK.|&lt;br /&gt;
000700d0  01 48 04 04 01 6d 05 d0  3a 18 f4 c6 51 c3 65 64  |.H...m..:...Q.ed|&lt;br /&gt;
000700e0  a0 e8 00 65 4d a3 05 9d  03 6a 4e ec c3 64 15 2c  |...eM....jN..d.,|&lt;br /&gt;
000700f0  e1 f7 1d 4a 0b b3 40 db  0b b3 80 db 0b b3 40 db  |...J..@.......@.|&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
00074000  18 6c 05 6d 3a 18 73 85  04 6e d0 f0 5c c8 63 64  |.l.m:.s..n..\.cd|&lt;br /&gt;
00074010  a0 e8 00 65 c3 64 e0 f3  08 6c 0b b5 3a 18 eb 09  |...e.d...l..:...|&lt;br /&gt;
00074020  00 6e 3a 18 71 02 00 65  3a 18 ae c1 00 65 3a 18  |.n:.q..e:....e:.|&lt;br /&gt;
00074030  a6 86 00 65 3a 18 20 ce  00 65 3a 18 16 c8 00 65  |...e:. ..e:....e|&lt;br /&gt;
00074040  43 64 a0 e8 15 00 07 9d  c3 64 0a b4 3a 18 68 cd  |Cd.......d..:.h.|&lt;br /&gt;
00074050  00 65 3a 18 52 d8 00 65  02 6c 07 b5 3a 18 eb 09  |.e:.R..e.l..:...|&lt;br /&gt;
00074060  01 6e 64 6c 05 b5 3a 18  eb 09 01 6e 43 64 a0 e8  |.ndl..:....nCd..|&lt;br /&gt;
00074070  9d 5b 07 9d 59 42 07 9d  01 19 06 9d 5c 67 30 f7  |.[..YB......\g0.|&lt;br /&gt;
00074080  70 9a 98 6a 58 eb 0a b3  12 ea e3 64 49 e3 40 f0  |p..jX......dI.@.|&lt;br /&gt;
00074090  44 aa 09 2a 3a 18 44 d0  00 00 00 00 00 00 00 00  |D..*:.D.........|&lt;br /&gt;
000740a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The zeros continue until another section starts at &amp;lt;code&amp;gt;000a0000&amp;lt;/code&amp;gt; and there is a block of strings starting around &amp;lt;code&amp;gt;000a0f20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 0x000a0f20 -n 1024 roti-b_3v&lt;br /&gt;
000a0f20  00 10 00 00 24 d5 01 9d  55 6e 64 65 66 69 6e 65  |....$...Undefine|&lt;br /&gt;
000a0f30  64 20 61 63 74 69 6f 6e  20 69 6e 20 74 68 69 73  |d action in this|&lt;br /&gt;
000a0f40  20 73 74 61 74 65 20 25  64 00 00 65 59 65 73 00  | state %d..eYes.|&lt;br /&gt;
000a0f50  4e 6f 00 00 7b 22 6f 70  63 6f 64 65 22 3a 22 62  |No..{&amp;quot;opcode&amp;quot;:&amp;quot;b|&lt;br /&gt;
000a0f60  61 74 63 68 43 6f 6d 70  6c 65 74 65 64 22 2c 22  |atchCompleted&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f70  70 61 79 6c 6f 61 64 22  3a 5b 22 25 64 22 2c 22  |payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f80  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0f90  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fa0  22 2c 22 25 64 22 2c 22  25 2e 31 66 22 2c 22 25  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fb0  2e 31 66 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0fc0  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fd0  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fe0  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a0ff0  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1000  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1010  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1020  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a1030  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a1040  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1050  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1060  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1070  2e 31 66 22 2c 22 25 2e  31 66 22 2c 22 25 2e 31  |.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1|&lt;br /&gt;
000a1080  66 22 2c 22 25 2e 31 66  22 2c 22 25 2e 31 66 22  |f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;|&lt;br /&gt;
000a1090  5d 7d 00 00 50 6f 77 65  72 20 73 65 74 74 69 6e  |]}..Power settin|&lt;br /&gt;
000a10a0  67 73 0a 69 73 20 6e 6f  74 20 73 75 70 70 6f 72  |gs.is not suppor|&lt;br /&gt;
000a10b0  74 65 64 2e 0a 49 20 61  6d 20 69 6e 20 50 72 6f  |ted..I am in Pro|&lt;br /&gt;
000a10c0  64 75 63 74 69 6f 6e 20  4d 6f 64 65 2e 00 00 65  |duction Mode...e|&lt;br /&gt;
000a10d0  50 6f 77 65 72 20 73 65  74 74 69 6e 67 73 20 69  |Power settings i|&lt;br /&gt;
000a10e0  73 20 6e 6f 74 20 73 75  70 70 6f 72 74 65 64 20  |s not supported |&lt;br /&gt;
000a10f0  28 50 52 4f 44 29 00 00  49 20 61 6d 20 61 6c 72  |(PROD)..I am alr|&lt;br /&gt;
000a1100  65 61 64 79 20 6f 70 65  72 61 74 69 6e 67 20 69  |eady operating i|&lt;br /&gt;
000a1110  6e 0a 74 68 65 20 6f 70  74 69 6d 61 6c 20 70 6f  |n.the optimal po|&lt;br /&gt;
000a1120  77 65 72 20 6d 6f 64 65  2e 00 00 65 50 6f 77 65  |wer mode...ePowe|&lt;br /&gt;
000a1130  72 20 73 65 74 74 69 6e  67 73 20 69 73 20 6e 6f  |r settings is no|&lt;br /&gt;
000a1140  74 20 73 75 70 70 6f 72  74 65 64 00 49 74 6f 72  |t supported.Itor|&lt;br /&gt;
000a1150  53 65 72 76 20 6e 6f 74  20 69 6e 20 63 6f 72 72  |Serv not in corr|&lt;br /&gt;
000a1160  65 63 74 20 73 74 61 74  65 20 28 25 75 29 00 00  |ect state (%u)..|&lt;br /&gt;
000a1170  49 27 6d 20 61 6c 72 65  61 64 79 20 63 6f 6e 6e  |I&#039;m already conn|&lt;br /&gt;
000a1180  65 63 74 65 64 0a 74 6f  20 22 25 73 22 2e 0a 44  |ected.to &amp;quot;%s&amp;quot;..D|&lt;br /&gt;
000a1190  6f 20 79 6f 75 20 77 61  6e 74 20 6d 65 20 74 6f  |o you want me to|&lt;br /&gt;
000a11a0  0a 73 77 69 74 63 68 20  74 6f 20 61 6e 6f 74 68  |.switch to anoth|&lt;br /&gt;
000a11b0  65 72 20 6e 65 74 77 6f  72 6b 3f 00 2a 00 00 65  |er network?.*..e|&lt;br /&gt;
000a11c0  25 73 2c 20 25 73 00 00  25 73 20 73 65 6c 65 63  |%s, %s..%s selec|&lt;br /&gt;
000a11d0  74 65 64 00 0a 53 74 6f  70 70 69 6e 67 20 6f 6e  |ted..Stopping on|&lt;br /&gt;
000a11e0  67 6f 69 6e 67 20 70 72  6f 63 65 73 73 2e 2e 2e  |going process...|&lt;br /&gt;
000a11f0  00 00 00 65 47 69 6d 6d  65 20 61 20 73 65 63 21  |...eGimme a sec!|&lt;br /&gt;
000a1200  00 00 00 65 49 20 61 6d  20 73 74 69 6c 6c 20 73  |...eI am still s|&lt;br /&gt;
000a1210  74 6f 70 70 69 6e 67 20  63 6f 6f 6b 69 6e 67 21  |topping cooking!|&lt;br /&gt;
000a1220  00 00 00 65 4e 6f 20 76  61 6c 69 64 20 72 65 63  |...eNo valid rec|&lt;br /&gt;
000a1230  69 70 65 73 20 66 6f 75  6e 64 20 69 6e 20 52 6f  |ipes found in Ro|&lt;br /&gt;
000a1240  74 69 6d 61 74 69 63 00  25 64 29 20 30 78 25 30  |timatic.%d) 0x%0|&lt;br /&gt;
000a1250  32 78 20 25 73 00 00 65  46 6c 6f 75 72 20 64 61  |2x %s..eFlour da|&lt;br /&gt;
000a1260  74 61 20 69 73 20 69 6e  76 61 6c 69 64 20 66 6f  |ta is invalid fo|&lt;br /&gt;
000a1270  72 20 52 65 63 69 70 65  20 25 64 20 69 6e 20 52  |r Recipe %d in R|&lt;br /&gt;
000a1280  6f 74 69 6d 61 74 69 63  00 00 00 65 44 6f 20 79  |otimatic...eDo y|&lt;br /&gt;
000a1290  6f 75 20 77 61 6e 74 20  74 6f 0a 70 6f 77 65 72  |ou want to.power|&lt;br /&gt;
000a12a0  20 6f 66 66 20 6d 61 63  68 69 6e 65 3f 00 00 65  | off machine?..e|&lt;br /&gt;
000a12b0  44 6f 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 70  |Do you want to p|&lt;br /&gt;
000a12c0  6f 77 65 72 20 6f 66 66  20 6d 61 63 68 69 6e 65  |ower off machine|&lt;br /&gt;
000a12d0  3f 00 00 65 50 69 7a 7a  61 20 62 61 73 65 20 69  |?..ePizza base i|&lt;br /&gt;
000a12e0  73 20 6f 6e 20 74 68 65  20 68 6f 74 20 70 61 6e  |s on the hot pan|&lt;br /&gt;
000a12f0  73 2c 20 70 6c 65 61 73  65 0a 70 69 63 6b 20 69  |s, please.pick i|&lt;br /&gt;
000a1300  74 20 75 70 20 69 6d 6d  65 64 69 61 74 65 6c 79  |t up immediately|&lt;br /&gt;
000a1310  20 74 6f 20 61 76 6f 69  64 0a 6f 76 65 72 63 6f  | to avoid.overco|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extracting all the ASCII strings yields this list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
e(%d[%dms]-&amp;gt;%d[%dms]) x %d -&amp;gt; %d&lt;br /&gt;
update.img&lt;br /&gt;
Front Door state changed: %d&lt;br /&gt;
Kneader Door state changed: %d&lt;br /&gt;
Undefined action in this state %d&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;batchCompleted&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;]}&lt;br /&gt;
Power settings is not supported.&lt;br /&gt;
I am in Production Mode.&lt;br /&gt;
Power settings is not supported (PROD)&lt;br /&gt;
I am already operating in the optimal power mode.&lt;br /&gt;
Power settings is not supported&lt;br /&gt;
ItorServ not in correct state (%u)&lt;br /&gt;
I&#039;m already connected to &amp;quot;%s&amp;quot;.&lt;br /&gt;
Do you want me to switch to another network?&lt;br /&gt;
Stopping ongoing process...&lt;br /&gt;
Gimme a sec!&lt;br /&gt;
I am still stopping cooking!&lt;br /&gt;
No valid recipes found in Rotimatic&lt;br /&gt;
Flour data is invalid for Recipe %d in Rotimatic&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Pizza base is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
Puri disc is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
%s-out notification shown&lt;br /&gt;
Do you want to stop making %s?&lt;br /&gt;
Do you want to stop making?&lt;br /&gt;
Do you want to start making %s?&lt;br /&gt;
Do you want to start making?&lt;br /&gt;
Make sure flour container is full. Start making?&lt;br /&gt;
Make sure water container is full. Start making?&lt;br /&gt;
Started making %s&lt;br /&gt;
DBG_ASSERT(): %s:%d.&lt;br /&gt;
No valid recipes found&lt;br /&gt;
Selection (%d) &amp;gt;= RecipeCount (%d)&lt;br /&gt;
Selection (%d) &amp;gt;= FlourCount (%d)&lt;br /&gt;
Roast level cannot be changed&lt;br /&gt;
2 Drops&lt;br /&gt;
1 Drop&lt;br /&gt;
Oil level cannot be changed&lt;br /&gt;
This app provides tips and support.&lt;br /&gt;
What do you want to cook?&lt;br /&gt;
Skip&lt;br /&gt;
Pipe cleaning. Help screen shown&lt;br /&gt;
Pipe cleaning. Resume screen shown&lt;br /&gt;
Pipe Sanitize step %u, %u&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;feedback&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;]}&lt;br /&gt;
DecDB() %d&lt;br /&gt;
IncRoti() %d&lt;br /&gt;
eRoti was folded&lt;br /&gt;
Roti isn&#039;t puffy&lt;br /&gt;
Roti too thick&lt;br /&gt;
Chewy rotis&lt;br /&gt;
Small rotis&lt;br /&gt;
Unevenly cooked edges&lt;br /&gt;
There were errors&lt;br /&gt;
Rotimatic is noisy&lt;br /&gt;
Other&lt;br /&gt;
Power Saver (Recommended)&lt;br /&gt;
Standby&lt;br /&gt;
Thin&lt;br /&gt;
Medium&lt;br /&gt;
Thick&lt;br /&gt;
Light&lt;br /&gt;
Medium Well&lt;br /&gt;
Well Done&lt;br /&gt;
Do not see your Flour?&lt;br /&gt;
-Empty-&lt;br /&gt;
Change Power Settings&lt;br /&gt;
Warranty&lt;br /&gt;
About&lt;br /&gt;
General Cleaning&lt;br /&gt;
Advanced Cleaning&lt;br /&gt;
Recipe/Flour&lt;br /&gt;
Recipe Settings&lt;br /&gt;
Clean Rotimatic&lt;br /&gt;
WiFi Configuration&lt;br /&gt;
General Settings&lt;br /&gt;
Menu&lt;br /&gt;
Thickness&lt;br /&gt;
Roast Level&lt;br /&gt;
Oil &lt;br /&gt;
Main view shown&lt;br /&gt;
%s pressed&lt;br /&gt;
Making not allowed for selftest build&lt;br /&gt;
Making cannot be started now&lt;br /&gt;
Starting up...&lt;br /&gt;
Final check...&lt;br /&gt;
Warming up...&lt;br /&gt;
eCooking...&lt;br /&gt;
Pausing...&lt;br /&gt;
Use + or - and press PLAY!&lt;br /&gt;
Invalid Configuration (Status: 0x%X)&lt;br /&gt;
Device ID: 0x%X&lt;br /&gt;
MADCTL: 0x%X&lt;br /&gt;
Pixel Format: 0x%X&lt;br /&gt;
ID: 0x%X&lt;br /&gt;
!&amp;quot;##$%&amp;amp;&#039;())*+,-./12345689:;=&amp;gt;?ABDEGIJLNOQSUWYZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ICSP / PICkit 3 ==&lt;br /&gt;
&lt;br /&gt;
Re-examing the P8 connector, it is not configured in the presumed &amp;quot;In Circuit Serial Programmer&amp;quot; (ICSP) pin ordering, or mostly maybe is?&lt;br /&gt;
&lt;br /&gt;
Was eventually able to work out that the MCU is using Pins 26 &amp;amp; 27 for Programming/Debugging&lt;br /&gt;
Communication Channel 2 and these are indeed connected to Pins 4 &amp;amp; 5 on the P8 header for PGD &amp;amp; PGC respectively, along with ground on Pin 3, MCRL (reset) Pin 1 and still a head scratcher on Pin 2 which doesn&#039;t appear to be connected to 3v3 or provide a Vdd target presence voltage. To convince MPLab there is a MCU connected I still have the Chip Clip attached to the SPI Flash Memory chip and powering the 3v3 rail via a Tigard device along with an additional 3v3 connected from their directly to Pin 2 on the PICkit 3 so it knows everything is connected and turned on.&lt;br /&gt;
&lt;br /&gt;
So this seems to leave me with a questionable task of recovering prior versions of firmware from older machines. It also lead to random threads of surely you&#039;d only be circumventing &amp;quot;Copy Protection&amp;quot; as a highfalutin Intellectual Property Thief, not to be confused with possibly curious miscreants. As far as actual firmware analysis it&#039;s a pretty moot point with binaries already in hand. Also still a bit of a suspension it&#039;s sitting on several versions of already recovered SPI Flash Memory, say around 0x00005000?&lt;br /&gt;
&lt;br /&gt;
And on that note, am I glad to be done fk&#039;n around with certain useless hackerspaces and bs drama, and just doin some damn fine hacking with literal (jumbo) shrimps on the BBQ and a quiet to properly noisy lab in the back. THANKS HACKER DOJO &amp;amp; ULTIMATE GAME NIGHT.&lt;br /&gt;
&lt;br /&gt;
The other &amp;lt;big&amp;gt;&#039;&#039;&#039;BIG&#039;&#039;&#039;&amp;lt;/big&amp;gt; insight was &#039;&#039;&#039;&amp;quot;hold the button on the PICkit 3 while plugging in the USB&amp;quot;&#039;&#039;&#039;, which puts it in &#039;&#039;&#039;&amp;quot;MPLab Mode&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now with that out of the way and the use of either Microchip MPLab X IDE or IPE we get...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*****************************************************&lt;br /&gt;
&lt;br /&gt;
Connecting to MPLAB PICkit 3...&lt;br /&gt;
&lt;br /&gt;
Currently loaded firmware on PICkit 3&lt;br /&gt;
Firmware Suite Version.....01.56.09&lt;br /&gt;
Firmware type..............PIC32MX&lt;br /&gt;
Target voltage detected&lt;br /&gt;
Target device PIC32MX470F512L found.&lt;br /&gt;
Device ID Revision = A0&lt;br /&gt;
&lt;br /&gt;
Reading...&lt;br /&gt;
&lt;br /&gt;
The following memory area(s) will be read:&lt;br /&gt;
program memory: start address = 0x1d000000, end address = 0x1d07ffff&lt;br /&gt;
boot config memory&lt;br /&gt;
configuration memory&lt;br /&gt;
The device is code protected.&lt;br /&gt;
Failed to read device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is some discussion about the &#039;&#039;&#039;The device is code protected.&#039;&#039;&#039; and &#039;&#039;&#039;Failed to read device&#039;&#039;&#039; as a failure mode when the cables are too long, or there isn&#039;t sufficient de-coupling capacitors. Also not entirely clear if it is able to read the &amp;quot;Copy Protection&amp;quot; (CP) register, or just not getting any data out. I suppose this is an improvement from the &amp;quot;Failing to connect&amp;quot; which was being caused by the programmer being in the wrong mode, not a failure to communication with the MCU.&lt;br /&gt;
&lt;br /&gt;
‡ThanX to MCMASTER of MTVRE / sliconpr0n.org for the use of their programmer/debugger.&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=274</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=274"/>
		<updated>2024-09-14T19:42:24Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: missing &amp;#039;/&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump (blank/wiped?) ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post boot re-dump ===&lt;br /&gt;
&lt;br /&gt;
After looking at the size of the firmware, the configuration of the PIC32 and other factors, setup a new test to do a minimal boot. Using a chip clip and the Tigard I was able to verify 3v3 power rail, convenient LED and test points labeled 3v3. Probing a bit more was able to identify 5v LED and test point along with easily accessible pins via connection headers that are currently disconnected form their respective components. The 5v rail can be tapped from Pin 4 on PM5 and ground Pin 4 on PM1. I used the pin from another micro-controller pulled directly from the USB connection to bring up the 5v rail and the chip clip and Tigard in the previous configuration for the 3v3. Both of these power rails are isolated and able to use a common ground.&lt;br /&gt;
&lt;br /&gt;
I reconnected the LCD &amp;amp; Capcitive Touch flat flexes on the main board ZEM0021-0x and powered up the 3v3 &amp;amp; 5v and released the PIC32 MCLR from ground to disable the reset state. In this configuration there are no other connectors or power sources attached and after a few seconds you get the customer powering on beep and a blank screen. The LCD then turns on and a &amp;lt;code&amp;gt;Trouble powering on! (0x7)&amp;lt;/code&amp;gt; message is displayed, followed moments later by a continuous beep and a power cycle loop continually trying to restart itself.&lt;br /&gt;
&lt;br /&gt;
Now trying to use the previous method of reading the 8MB SPI flash, with MCLR grounded, results in no devices being detected. Disconnecting the LCD, Capacitive Touch, and 5v supply once again enumerates the SPI memory and it can be read out to a local file. This time it appears to have actual data following all zeros up to 000dffff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 458752 -n 1681 roti-b_3v&lt;br /&gt;
00070000  40 5a 80 bf 64 10 88 bf  68 10 88 bf 34 10 88 bf  |@Z..d...h...4...|&lt;br /&gt;
00070010  5c 67 50 f1 7c a2 c4 64  1b 23 00 6b 50 f1 7c c2  |\gP.|..d.#.kP.|.|&lt;br /&gt;
00070020  00 6b 70 f1 60 da 70 f1  64 c2 70 f1 65 c2 3a 18  |.kp.`.p.d.p.e.:.|&lt;br /&gt;
00070030  eb 3e 08 6c 3a 18 3d 59  08 6c 3a 18 77 7c 08 6c  |.&amp;gt;.l:.=Y.l:.w|.l|&lt;br /&gt;
00070040  05 b2 00 6c 03 6d 14 6e  0e 6f 3a 18 d0 46 04 d2  |...l.m.n.o:..F..|&lt;br /&gt;
00070050  44 64 a0 e8 80 3a 07 9d  6f 45 11 eb 0e 5b f5 64  |Dd...:..oE...[.d|&lt;br /&gt;
00070060  25 67 19 60 0f 68 8c e8  14 6c 3a 18 90 d0 04 d3  |%g.`.h...l:.....|&lt;br /&gt;
00070070  40 6c 3a 18 90 d0 0d ec  04 93 3a 18 90 d0 83 67  |@l:.......:....g|&lt;br /&gt;
00070080  07 b2 09 e2 80 a2 3a 18  90 d0 ff 49 01 48 0f 6a  |......:....I.H.j|&lt;br /&gt;
00070090  11 e9 4c e8 f5 29 75 64  a0 e8 00 65 78 21 01 a0  |..L..)ud...ex!..|&lt;br /&gt;
000700a0  e5 64 00 6a 1c 67 51 f0  40 c0 51 f0 00 48 7d 67  |.d.j.gQ.@.Q..H}g|&lt;br /&gt;
000700b0  41 c0 20 6a 50 c3 77 6a  4b ea 51 c3 04 04 0a b2  |A. jP.wjK.Q.....|&lt;br /&gt;
000700c0  00 6d 05 d0 3a 18 f4 c6  06 d2 78 6a 7d 67 4b ea  |.m..:.....xj}gK.|&lt;br /&gt;
000700d0  01 48 04 04 01 6d 05 d0  3a 18 f4 c6 51 c3 65 64  |.H...m..:...Q.ed|&lt;br /&gt;
000700e0  a0 e8 00 65 4d a3 05 9d  03 6a 4e ec c3 64 15 2c  |...eM....jN..d.,|&lt;br /&gt;
000700f0  e1 f7 1d 4a 0b b3 40 db  0b b3 80 db 0b b3 40 db  |...J..@.......@.|&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
00074000  18 6c 05 6d 3a 18 73 85  04 6e d0 f0 5c c8 63 64  |.l.m:.s..n..\.cd|&lt;br /&gt;
00074010  a0 e8 00 65 c3 64 e0 f3  08 6c 0b b5 3a 18 eb 09  |...e.d...l..:...|&lt;br /&gt;
00074020  00 6e 3a 18 71 02 00 65  3a 18 ae c1 00 65 3a 18  |.n:.q..e:....e:.|&lt;br /&gt;
00074030  a6 86 00 65 3a 18 20 ce  00 65 3a 18 16 c8 00 65  |...e:. ..e:....e|&lt;br /&gt;
00074040  43 64 a0 e8 15 00 07 9d  c3 64 0a b4 3a 18 68 cd  |Cd.......d..:.h.|&lt;br /&gt;
00074050  00 65 3a 18 52 d8 00 65  02 6c 07 b5 3a 18 eb 09  |.e:.R..e.l..:...|&lt;br /&gt;
00074060  01 6e 64 6c 05 b5 3a 18  eb 09 01 6e 43 64 a0 e8  |.ndl..:....nCd..|&lt;br /&gt;
00074070  9d 5b 07 9d 59 42 07 9d  01 19 06 9d 5c 67 30 f7  |.[..YB......\g0.|&lt;br /&gt;
00074080  70 9a 98 6a 58 eb 0a b3  12 ea e3 64 49 e3 40 f0  |p..jX......dI.@.|&lt;br /&gt;
00074090  44 aa 09 2a 3a 18 44 d0  00 00 00 00 00 00 00 00  |D..*:.D.........|&lt;br /&gt;
000740a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The zeros continue until another section starts at &amp;lt;code&amp;gt;000a0000&amp;lt;/code&amp;gt; and there is a block of strings starting around &amp;lt;code&amp;gt;000a0f20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 0x000a0f20 -n 1024 roti-b_3v&lt;br /&gt;
000a0f20  00 10 00 00 24 d5 01 9d  55 6e 64 65 66 69 6e 65  |....$...Undefine|&lt;br /&gt;
000a0f30  64 20 61 63 74 69 6f 6e  20 69 6e 20 74 68 69 73  |d action in this|&lt;br /&gt;
000a0f40  20 73 74 61 74 65 20 25  64 00 00 65 59 65 73 00  | state %d..eYes.|&lt;br /&gt;
000a0f50  4e 6f 00 00 7b 22 6f 70  63 6f 64 65 22 3a 22 62  |No..{&amp;quot;opcode&amp;quot;:&amp;quot;b|&lt;br /&gt;
000a0f60  61 74 63 68 43 6f 6d 70  6c 65 74 65 64 22 2c 22  |atchCompleted&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f70  70 61 79 6c 6f 61 64 22  3a 5b 22 25 64 22 2c 22  |payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f80  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0f90  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fa0  22 2c 22 25 64 22 2c 22  25 2e 31 66 22 2c 22 25  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fb0  2e 31 66 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0fc0  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fd0  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fe0  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a0ff0  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1000  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1010  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1020  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a1030  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a1040  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1050  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1060  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1070  2e 31 66 22 2c 22 25 2e  31 66 22 2c 22 25 2e 31  |.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1|&lt;br /&gt;
000a1080  66 22 2c 22 25 2e 31 66  22 2c 22 25 2e 31 66 22  |f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;|&lt;br /&gt;
000a1090  5d 7d 00 00 50 6f 77 65  72 20 73 65 74 74 69 6e  |]}..Power settin|&lt;br /&gt;
000a10a0  67 73 0a 69 73 20 6e 6f  74 20 73 75 70 70 6f 72  |gs.is not suppor|&lt;br /&gt;
000a10b0  74 65 64 2e 0a 49 20 61  6d 20 69 6e 20 50 72 6f  |ted..I am in Pro|&lt;br /&gt;
000a10c0  64 75 63 74 69 6f 6e 20  4d 6f 64 65 2e 00 00 65  |duction Mode...e|&lt;br /&gt;
000a10d0  50 6f 77 65 72 20 73 65  74 74 69 6e 67 73 20 69  |Power settings i|&lt;br /&gt;
000a10e0  73 20 6e 6f 74 20 73 75  70 70 6f 72 74 65 64 20  |s not supported |&lt;br /&gt;
000a10f0  28 50 52 4f 44 29 00 00  49 20 61 6d 20 61 6c 72  |(PROD)..I am alr|&lt;br /&gt;
000a1100  65 61 64 79 20 6f 70 65  72 61 74 69 6e 67 20 69  |eady operating i|&lt;br /&gt;
000a1110  6e 0a 74 68 65 20 6f 70  74 69 6d 61 6c 20 70 6f  |n.the optimal po|&lt;br /&gt;
000a1120  77 65 72 20 6d 6f 64 65  2e 00 00 65 50 6f 77 65  |wer mode...ePowe|&lt;br /&gt;
000a1130  72 20 73 65 74 74 69 6e  67 73 20 69 73 20 6e 6f  |r settings is no|&lt;br /&gt;
000a1140  74 20 73 75 70 70 6f 72  74 65 64 00 49 74 6f 72  |t supported.Itor|&lt;br /&gt;
000a1150  53 65 72 76 20 6e 6f 74  20 69 6e 20 63 6f 72 72  |Serv not in corr|&lt;br /&gt;
000a1160  65 63 74 20 73 74 61 74  65 20 28 25 75 29 00 00  |ect state (%u)..|&lt;br /&gt;
000a1170  49 27 6d 20 61 6c 72 65  61 64 79 20 63 6f 6e 6e  |I&#039;m already conn|&lt;br /&gt;
000a1180  65 63 74 65 64 0a 74 6f  20 22 25 73 22 2e 0a 44  |ected.to &amp;quot;%s&amp;quot;..D|&lt;br /&gt;
000a1190  6f 20 79 6f 75 20 77 61  6e 74 20 6d 65 20 74 6f  |o you want me to|&lt;br /&gt;
000a11a0  0a 73 77 69 74 63 68 20  74 6f 20 61 6e 6f 74 68  |.switch to anoth|&lt;br /&gt;
000a11b0  65 72 20 6e 65 74 77 6f  72 6b 3f 00 2a 00 00 65  |er network?.*..e|&lt;br /&gt;
000a11c0  25 73 2c 20 25 73 00 00  25 73 20 73 65 6c 65 63  |%s, %s..%s selec|&lt;br /&gt;
000a11d0  74 65 64 00 0a 53 74 6f  70 70 69 6e 67 20 6f 6e  |ted..Stopping on|&lt;br /&gt;
000a11e0  67 6f 69 6e 67 20 70 72  6f 63 65 73 73 2e 2e 2e  |going process...|&lt;br /&gt;
000a11f0  00 00 00 65 47 69 6d 6d  65 20 61 20 73 65 63 21  |...eGimme a sec!|&lt;br /&gt;
000a1200  00 00 00 65 49 20 61 6d  20 73 74 69 6c 6c 20 73  |...eI am still s|&lt;br /&gt;
000a1210  74 6f 70 70 69 6e 67 20  63 6f 6f 6b 69 6e 67 21  |topping cooking!|&lt;br /&gt;
000a1220  00 00 00 65 4e 6f 20 76  61 6c 69 64 20 72 65 63  |...eNo valid rec|&lt;br /&gt;
000a1230  69 70 65 73 20 66 6f 75  6e 64 20 69 6e 20 52 6f  |ipes found in Ro|&lt;br /&gt;
000a1240  74 69 6d 61 74 69 63 00  25 64 29 20 30 78 25 30  |timatic.%d) 0x%0|&lt;br /&gt;
000a1250  32 78 20 25 73 00 00 65  46 6c 6f 75 72 20 64 61  |2x %s..eFlour da|&lt;br /&gt;
000a1260  74 61 20 69 73 20 69 6e  76 61 6c 69 64 20 66 6f  |ta is invalid fo|&lt;br /&gt;
000a1270  72 20 52 65 63 69 70 65  20 25 64 20 69 6e 20 52  |r Recipe %d in R|&lt;br /&gt;
000a1280  6f 74 69 6d 61 74 69 63  00 00 00 65 44 6f 20 79  |otimatic...eDo y|&lt;br /&gt;
000a1290  6f 75 20 77 61 6e 74 20  74 6f 0a 70 6f 77 65 72  |ou want to.power|&lt;br /&gt;
000a12a0  20 6f 66 66 20 6d 61 63  68 69 6e 65 3f 00 00 65  | off machine?..e|&lt;br /&gt;
000a12b0  44 6f 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 70  |Do you want to p|&lt;br /&gt;
000a12c0  6f 77 65 72 20 6f 66 66  20 6d 61 63 68 69 6e 65  |ower off machine|&lt;br /&gt;
000a12d0  3f 00 00 65 50 69 7a 7a  61 20 62 61 73 65 20 69  |?..ePizza base i|&lt;br /&gt;
000a12e0  73 20 6f 6e 20 74 68 65  20 68 6f 74 20 70 61 6e  |s on the hot pan|&lt;br /&gt;
000a12f0  73 2c 20 70 6c 65 61 73  65 0a 70 69 63 6b 20 69  |s, please.pick i|&lt;br /&gt;
000a1300  74 20 75 70 20 69 6d 6d  65 64 69 61 74 65 6c 79  |t up immediately|&lt;br /&gt;
000a1310  20 74 6f 20 61 76 6f 69  64 0a 6f 76 65 72 63 6f  | to avoid.overco|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extracting all the ASCII strings yields this list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
e(%d[%dms]-&amp;gt;%d[%dms]) x %d -&amp;gt; %d&lt;br /&gt;
update.img&lt;br /&gt;
Front Door state changed: %d&lt;br /&gt;
Kneader Door state changed: %d&lt;br /&gt;
Undefined action in this state %d&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;batchCompleted&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;]}&lt;br /&gt;
Power settings is not supported.&lt;br /&gt;
I am in Production Mode.&lt;br /&gt;
Power settings is not supported (PROD)&lt;br /&gt;
I am already operating in the optimal power mode.&lt;br /&gt;
Power settings is not supported&lt;br /&gt;
ItorServ not in correct state (%u)&lt;br /&gt;
I&#039;m already connected to &amp;quot;%s&amp;quot;.&lt;br /&gt;
Do you want me to switch to another network?&lt;br /&gt;
Stopping ongoing process...&lt;br /&gt;
Gimme a sec!&lt;br /&gt;
I am still stopping cooking!&lt;br /&gt;
No valid recipes found in Rotimatic&lt;br /&gt;
Flour data is invalid for Recipe %d in Rotimatic&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Pizza base is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
Puri disc is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
%s-out notification shown&lt;br /&gt;
Do you want to stop making %s?&lt;br /&gt;
Do you want to stop making?&lt;br /&gt;
Do you want to start making %s?&lt;br /&gt;
Do you want to start making?&lt;br /&gt;
Make sure flour container is full. Start making?&lt;br /&gt;
Make sure water container is full. Start making?&lt;br /&gt;
Started making %s&lt;br /&gt;
DBG_ASSERT(): %s:%d.&lt;br /&gt;
No valid recipes found&lt;br /&gt;
Selection (%d) &amp;gt;= RecipeCount (%d)&lt;br /&gt;
Selection (%d) &amp;gt;= FlourCount (%d)&lt;br /&gt;
Roast level cannot be changed&lt;br /&gt;
2 Drops&lt;br /&gt;
1 Drop&lt;br /&gt;
Oil level cannot be changed&lt;br /&gt;
This app provides tips and support.&lt;br /&gt;
What do you want to cook?&lt;br /&gt;
Skip&lt;br /&gt;
Pipe cleaning. Help screen shown&lt;br /&gt;
Pipe cleaning. Resume screen shown&lt;br /&gt;
Pipe Sanitize step %u, %u&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;feedback&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;]}&lt;br /&gt;
DecDB() %d&lt;br /&gt;
IncRoti() %d&lt;br /&gt;
eRoti was folded&lt;br /&gt;
Roti isn&#039;t puffy&lt;br /&gt;
Roti too thick&lt;br /&gt;
Chewy rotis&lt;br /&gt;
Small rotis&lt;br /&gt;
Unevenly cooked edges&lt;br /&gt;
There were errors&lt;br /&gt;
Rotimatic is noisy&lt;br /&gt;
Other&lt;br /&gt;
Power Saver (Recommended)&lt;br /&gt;
Standby&lt;br /&gt;
Thin&lt;br /&gt;
Medium&lt;br /&gt;
Thick&lt;br /&gt;
Light&lt;br /&gt;
Medium Well&lt;br /&gt;
Well Done&lt;br /&gt;
Do not see your Flour?&lt;br /&gt;
-Empty-&lt;br /&gt;
Change Power Settings&lt;br /&gt;
Warranty&lt;br /&gt;
About&lt;br /&gt;
General Cleaning&lt;br /&gt;
Advanced Cleaning&lt;br /&gt;
Recipe/Flour&lt;br /&gt;
Recipe Settings&lt;br /&gt;
Clean Rotimatic&lt;br /&gt;
WiFi Configuration&lt;br /&gt;
General Settings&lt;br /&gt;
Menu&lt;br /&gt;
Thickness&lt;br /&gt;
Roast Level&lt;br /&gt;
Oil &lt;br /&gt;
Main view shown&lt;br /&gt;
%s pressed&lt;br /&gt;
Making not allowed for selftest build&lt;br /&gt;
Making cannot be started now&lt;br /&gt;
Starting up...&lt;br /&gt;
Final check...&lt;br /&gt;
Warming up...&lt;br /&gt;
eCooking...&lt;br /&gt;
Pausing...&lt;br /&gt;
Use + or - and press PLAY!&lt;br /&gt;
Invalid Configuration (Status: 0x%X)&lt;br /&gt;
Device ID: 0x%X&lt;br /&gt;
MADCTL: 0x%X&lt;br /&gt;
Pixel Format: 0x%X&lt;br /&gt;
ID: 0x%X&lt;br /&gt;
!&amp;quot;##$%&amp;amp;&#039;())*+,-./12345689:;=&amp;gt;?ABDEGIJLNOQSUWYZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=273</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=273"/>
		<updated>2024-09-14T19:41:27Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Post boot re-dump */ strings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump (blank/wiped?) ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post boot re-dump ===&lt;br /&gt;
&lt;br /&gt;
After looking at the size of the firmware, the configuration of the PIC32 and other factors, setup a new test to do a minimal boot. Using a chip clip and the Tigard I was able to verify 3v3 power rail, convenient LED and test points labeled 3v3. Probing a bit more was able to identify 5v LED and test point along with easily accessible pins via connection headers that are currently disconnected form their respective components. The 5v rail can be tapped from Pin 4 on PM5 and ground Pin 4 on PM1. I used the pin from another micro-controller pulled directly from the USB connection to bring up the 5v rail and the chip clip and Tigard in the previous configuration for the 3v3. Both of these power rails are isolated and able to use a common ground.&lt;br /&gt;
&lt;br /&gt;
I reconnected the LCD &amp;amp; Capcitive Touch flat flexes on the main board ZEM0021-0x and powered up the 3v3 &amp;amp; 5v and released the PIC32 MCLR from ground to disable the reset state. In this configuration there are no other connectors or power sources attached and after a few seconds you get the customer powering on beep and a blank screen. The LCD then turns on and a &amp;lt;code&amp;gt;Trouble powering on! (0x7)&amp;lt;/code&amp;gt; message is displayed, followed moments later by a continuous beep and a power cycle loop continually trying to restart itself.&lt;br /&gt;
&lt;br /&gt;
Now trying to use the previous method of reading the 8MB SPI flash, with MCLR grounded, results in no devices being detected. Disconnecting the LCD, Capacitive Touch, and 5v supply once again enumerates the SPI memory and it can be read out to a local file. This time it appears to have actual data following all zeros up to 000dffff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 458752 -n 1681 roti-b_3v&lt;br /&gt;
00070000  40 5a 80 bf 64 10 88 bf  68 10 88 bf 34 10 88 bf  |@Z..d...h...4...|&lt;br /&gt;
00070010  5c 67 50 f1 7c a2 c4 64  1b 23 00 6b 50 f1 7c c2  |\gP.|..d.#.kP.|.|&lt;br /&gt;
00070020  00 6b 70 f1 60 da 70 f1  64 c2 70 f1 65 c2 3a 18  |.kp.`.p.d.p.e.:.|&lt;br /&gt;
00070030  eb 3e 08 6c 3a 18 3d 59  08 6c 3a 18 77 7c 08 6c  |.&amp;gt;.l:.=Y.l:.w|.l|&lt;br /&gt;
00070040  05 b2 00 6c 03 6d 14 6e  0e 6f 3a 18 d0 46 04 d2  |...l.m.n.o:..F..|&lt;br /&gt;
00070050  44 64 a0 e8 80 3a 07 9d  6f 45 11 eb 0e 5b f5 64  |Dd...:..oE...[.d|&lt;br /&gt;
00070060  25 67 19 60 0f 68 8c e8  14 6c 3a 18 90 d0 04 d3  |%g.`.h...l:.....|&lt;br /&gt;
00070070  40 6c 3a 18 90 d0 0d ec  04 93 3a 18 90 d0 83 67  |@l:.......:....g|&lt;br /&gt;
00070080  07 b2 09 e2 80 a2 3a 18  90 d0 ff 49 01 48 0f 6a  |......:....I.H.j|&lt;br /&gt;
00070090  11 e9 4c e8 f5 29 75 64  a0 e8 00 65 78 21 01 a0  |..L..)ud...ex!..|&lt;br /&gt;
000700a0  e5 64 00 6a 1c 67 51 f0  40 c0 51 f0 00 48 7d 67  |.d.j.gQ.@.Q..H}g|&lt;br /&gt;
000700b0  41 c0 20 6a 50 c3 77 6a  4b ea 51 c3 04 04 0a b2  |A. jP.wjK.Q.....|&lt;br /&gt;
000700c0  00 6d 05 d0 3a 18 f4 c6  06 d2 78 6a 7d 67 4b ea  |.m..:.....xj}gK.|&lt;br /&gt;
000700d0  01 48 04 04 01 6d 05 d0  3a 18 f4 c6 51 c3 65 64  |.H...m..:...Q.ed|&lt;br /&gt;
000700e0  a0 e8 00 65 4d a3 05 9d  03 6a 4e ec c3 64 15 2c  |...eM....jN..d.,|&lt;br /&gt;
000700f0  e1 f7 1d 4a 0b b3 40 db  0b b3 80 db 0b b3 40 db  |...J..@.......@.|&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
00074000  18 6c 05 6d 3a 18 73 85  04 6e d0 f0 5c c8 63 64  |.l.m:.s..n..\.cd|&lt;br /&gt;
00074010  a0 e8 00 65 c3 64 e0 f3  08 6c 0b b5 3a 18 eb 09  |...e.d...l..:...|&lt;br /&gt;
00074020  00 6e 3a 18 71 02 00 65  3a 18 ae c1 00 65 3a 18  |.n:.q..e:....e:.|&lt;br /&gt;
00074030  a6 86 00 65 3a 18 20 ce  00 65 3a 18 16 c8 00 65  |...e:. ..e:....e|&lt;br /&gt;
00074040  43 64 a0 e8 15 00 07 9d  c3 64 0a b4 3a 18 68 cd  |Cd.......d..:.h.|&lt;br /&gt;
00074050  00 65 3a 18 52 d8 00 65  02 6c 07 b5 3a 18 eb 09  |.e:.R..e.l..:...|&lt;br /&gt;
00074060  01 6e 64 6c 05 b5 3a 18  eb 09 01 6e 43 64 a0 e8  |.ndl..:....nCd..|&lt;br /&gt;
00074070  9d 5b 07 9d 59 42 07 9d  01 19 06 9d 5c 67 30 f7  |.[..YB......\g0.|&lt;br /&gt;
00074080  70 9a 98 6a 58 eb 0a b3  12 ea e3 64 49 e3 40 f0  |p..jX......dI.@.|&lt;br /&gt;
00074090  44 aa 09 2a 3a 18 44 d0  00 00 00 00 00 00 00 00  |D..*:.D.........|&lt;br /&gt;
000740a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The zeros continue until another section starts at &amp;lt;code&amp;gt;000a0000&amp;lt;/code&amp;gt; and there is a block of strings starting around &amp;lt;code&amp;gt;000a0f20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 0x000a0f20 -n 1024 roti-b_3v&lt;br /&gt;
000a0f20  00 10 00 00 24 d5 01 9d  55 6e 64 65 66 69 6e 65  |....$...Undefine|&lt;br /&gt;
000a0f30  64 20 61 63 74 69 6f 6e  20 69 6e 20 74 68 69 73  |d action in this|&lt;br /&gt;
000a0f40  20 73 74 61 74 65 20 25  64 00 00 65 59 65 73 00  | state %d..eYes.|&lt;br /&gt;
000a0f50  4e 6f 00 00 7b 22 6f 70  63 6f 64 65 22 3a 22 62  |No..{&amp;quot;opcode&amp;quot;:&amp;quot;b|&lt;br /&gt;
000a0f60  61 74 63 68 43 6f 6d 70  6c 65 74 65 64 22 2c 22  |atchCompleted&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f70  70 61 79 6c 6f 61 64 22  3a 5b 22 25 64 22 2c 22  |payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f80  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0f90  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fa0  22 2c 22 25 64 22 2c 22  25 2e 31 66 22 2c 22 25  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fb0  2e 31 66 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0fc0  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fd0  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fe0  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a0ff0  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1000  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1010  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1020  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a1030  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a1040  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1050  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1060  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1070  2e 31 66 22 2c 22 25 2e  31 66 22 2c 22 25 2e 31  |.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1|&lt;br /&gt;
000a1080  66 22 2c 22 25 2e 31 66  22 2c 22 25 2e 31 66 22  |f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;|&lt;br /&gt;
000a1090  5d 7d 00 00 50 6f 77 65  72 20 73 65 74 74 69 6e  |]}..Power settin|&lt;br /&gt;
000a10a0  67 73 0a 69 73 20 6e 6f  74 20 73 75 70 70 6f 72  |gs.is not suppor|&lt;br /&gt;
000a10b0  74 65 64 2e 0a 49 20 61  6d 20 69 6e 20 50 72 6f  |ted..I am in Pro|&lt;br /&gt;
000a10c0  64 75 63 74 69 6f 6e 20  4d 6f 64 65 2e 00 00 65  |duction Mode...e|&lt;br /&gt;
000a10d0  50 6f 77 65 72 20 73 65  74 74 69 6e 67 73 20 69  |Power settings i|&lt;br /&gt;
000a10e0  73 20 6e 6f 74 20 73 75  70 70 6f 72 74 65 64 20  |s not supported |&lt;br /&gt;
000a10f0  28 50 52 4f 44 29 00 00  49 20 61 6d 20 61 6c 72  |(PROD)..I am alr|&lt;br /&gt;
000a1100  65 61 64 79 20 6f 70 65  72 61 74 69 6e 67 20 69  |eady operating i|&lt;br /&gt;
000a1110  6e 0a 74 68 65 20 6f 70  74 69 6d 61 6c 20 70 6f  |n.the optimal po|&lt;br /&gt;
000a1120  77 65 72 20 6d 6f 64 65  2e 00 00 65 50 6f 77 65  |wer mode...ePowe|&lt;br /&gt;
000a1130  72 20 73 65 74 74 69 6e  67 73 20 69 73 20 6e 6f  |r settings is no|&lt;br /&gt;
000a1140  74 20 73 75 70 70 6f 72  74 65 64 00 49 74 6f 72  |t supported.Itor|&lt;br /&gt;
000a1150  53 65 72 76 20 6e 6f 74  20 69 6e 20 63 6f 72 72  |Serv not in corr|&lt;br /&gt;
000a1160  65 63 74 20 73 74 61 74  65 20 28 25 75 29 00 00  |ect state (%u)..|&lt;br /&gt;
000a1170  49 27 6d 20 61 6c 72 65  61 64 79 20 63 6f 6e 6e  |I&#039;m already conn|&lt;br /&gt;
000a1180  65 63 74 65 64 0a 74 6f  20 22 25 73 22 2e 0a 44  |ected.to &amp;quot;%s&amp;quot;..D|&lt;br /&gt;
000a1190  6f 20 79 6f 75 20 77 61  6e 74 20 6d 65 20 74 6f  |o you want me to|&lt;br /&gt;
000a11a0  0a 73 77 69 74 63 68 20  74 6f 20 61 6e 6f 74 68  |.switch to anoth|&lt;br /&gt;
000a11b0  65 72 20 6e 65 74 77 6f  72 6b 3f 00 2a 00 00 65  |er network?.*..e|&lt;br /&gt;
000a11c0  25 73 2c 20 25 73 00 00  25 73 20 73 65 6c 65 63  |%s, %s..%s selec|&lt;br /&gt;
000a11d0  74 65 64 00 0a 53 74 6f  70 70 69 6e 67 20 6f 6e  |ted..Stopping on|&lt;br /&gt;
000a11e0  67 6f 69 6e 67 20 70 72  6f 63 65 73 73 2e 2e 2e  |going process...|&lt;br /&gt;
000a11f0  00 00 00 65 47 69 6d 6d  65 20 61 20 73 65 63 21  |...eGimme a sec!|&lt;br /&gt;
000a1200  00 00 00 65 49 20 61 6d  20 73 74 69 6c 6c 20 73  |...eI am still s|&lt;br /&gt;
000a1210  74 6f 70 70 69 6e 67 20  63 6f 6f 6b 69 6e 67 21  |topping cooking!|&lt;br /&gt;
000a1220  00 00 00 65 4e 6f 20 76  61 6c 69 64 20 72 65 63  |...eNo valid rec|&lt;br /&gt;
000a1230  69 70 65 73 20 66 6f 75  6e 64 20 69 6e 20 52 6f  |ipes found in Ro|&lt;br /&gt;
000a1240  74 69 6d 61 74 69 63 00  25 64 29 20 30 78 25 30  |timatic.%d) 0x%0|&lt;br /&gt;
000a1250  32 78 20 25 73 00 00 65  46 6c 6f 75 72 20 64 61  |2x %s..eFlour da|&lt;br /&gt;
000a1260  74 61 20 69 73 20 69 6e  76 61 6c 69 64 20 66 6f  |ta is invalid fo|&lt;br /&gt;
000a1270  72 20 52 65 63 69 70 65  20 25 64 20 69 6e 20 52  |r Recipe %d in R|&lt;br /&gt;
000a1280  6f 74 69 6d 61 74 69 63  00 00 00 65 44 6f 20 79  |otimatic...eDo y|&lt;br /&gt;
000a1290  6f 75 20 77 61 6e 74 20  74 6f 0a 70 6f 77 65 72  |ou want to.power|&lt;br /&gt;
000a12a0  20 6f 66 66 20 6d 61 63  68 69 6e 65 3f 00 00 65  | off machine?..e|&lt;br /&gt;
000a12b0  44 6f 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 70  |Do you want to p|&lt;br /&gt;
000a12c0  6f 77 65 72 20 6f 66 66  20 6d 61 63 68 69 6e 65  |ower off machine|&lt;br /&gt;
000a12d0  3f 00 00 65 50 69 7a 7a  61 20 62 61 73 65 20 69  |?..ePizza base i|&lt;br /&gt;
000a12e0  73 20 6f 6e 20 74 68 65  20 68 6f 74 20 70 61 6e  |s on the hot pan|&lt;br /&gt;
000a12f0  73 2c 20 70 6c 65 61 73  65 0a 70 69 63 6b 20 69  |s, please.pick i|&lt;br /&gt;
000a1300  74 20 75 70 20 69 6d 6d  65 64 69 61 74 65 6c 79  |t up immediately|&lt;br /&gt;
000a1310  20 74 6f 20 61 76 6f 69  64 0a 6f 76 65 72 63 6f  | to avoid.overco|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extracting all the ASCII strings yields this list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
e(%d[%dms]-&amp;gt;%d[%dms]) x %d -&amp;gt; %d&lt;br /&gt;
update.img&lt;br /&gt;
Front Door state changed: %d&lt;br /&gt;
Kneader Door state changed: %d&lt;br /&gt;
Undefined action in this state %d&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;batchCompleted&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;]}&lt;br /&gt;
Power settings is not supported.&lt;br /&gt;
I am in Production Mode.&lt;br /&gt;
Power settings is not supported (PROD)&lt;br /&gt;
I am already operating in the optimal power mode.&lt;br /&gt;
Power settings is not supported&lt;br /&gt;
ItorServ not in correct state (%u)&lt;br /&gt;
I&#039;m already connected to &amp;quot;%s&amp;quot;.&lt;br /&gt;
Do you want me to switch to another network?&lt;br /&gt;
Stopping ongoing process...&lt;br /&gt;
Gimme a sec!&lt;br /&gt;
I am still stopping cooking!&lt;br /&gt;
No valid recipes found in Rotimatic&lt;br /&gt;
Flour data is invalid for Recipe %d in Rotimatic&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Do you want to power off machine?&lt;br /&gt;
Pizza base is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
Puri disc is on the hot pans, please pick it up immediately to avoid overcooking. It comes out hot! Handle with care.&lt;br /&gt;
%s-out notification shown&lt;br /&gt;
Do you want to stop making %s?&lt;br /&gt;
Do you want to stop making?&lt;br /&gt;
Do you want to start making %s?&lt;br /&gt;
Do you want to start making?&lt;br /&gt;
Make sure flour container is full. Start making?&lt;br /&gt;
Make sure water container is full. Start making?&lt;br /&gt;
Started making %s&lt;br /&gt;
DBG_ASSERT(): %s:%d.&lt;br /&gt;
No valid recipes found&lt;br /&gt;
Selection (%d) &amp;gt;= RecipeCount (%d)&lt;br /&gt;
Selection (%d) &amp;gt;= FlourCount (%d)&lt;br /&gt;
Roast level cannot be changed&lt;br /&gt;
2 Drops&lt;br /&gt;
1 Drop&lt;br /&gt;
Oil level cannot be changed&lt;br /&gt;
This app provides tips and support.&lt;br /&gt;
What do you want to cook?&lt;br /&gt;
Skip&lt;br /&gt;
Pipe cleaning. Help screen shown&lt;br /&gt;
Pipe cleaning. Resume screen shown&lt;br /&gt;
Pipe Sanitize step %u, %u&lt;br /&gt;
{&amp;quot;opcode&amp;quot;:&amp;quot;feedback&amp;quot;,&amp;quot;payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;]}&lt;br /&gt;
DecDB() %d&lt;br /&gt;
IncRoti() %d&lt;br /&gt;
eRoti was folded&lt;br /&gt;
Roti isn&#039;t puffy&lt;br /&gt;
Roti too thick&lt;br /&gt;
Chewy rotis&lt;br /&gt;
Small rotis&lt;br /&gt;
Unevenly cooked edges&lt;br /&gt;
There were errors&lt;br /&gt;
Rotimatic is noisy&lt;br /&gt;
Other&lt;br /&gt;
Power Saver (Recommended)&lt;br /&gt;
Standby&lt;br /&gt;
Thin&lt;br /&gt;
Medium&lt;br /&gt;
Thick&lt;br /&gt;
Light&lt;br /&gt;
Medium Well&lt;br /&gt;
Well Done&lt;br /&gt;
Do not see your Flour?&lt;br /&gt;
-Empty-&lt;br /&gt;
Change Power Settings&lt;br /&gt;
Warranty&lt;br /&gt;
About&lt;br /&gt;
General Cleaning&lt;br /&gt;
Advanced Cleaning&lt;br /&gt;
Recipe/Flour&lt;br /&gt;
Recipe Settings&lt;br /&gt;
Clean Rotimatic&lt;br /&gt;
WiFi Configuration&lt;br /&gt;
General Settings&lt;br /&gt;
Menu&lt;br /&gt;
Thickness&lt;br /&gt;
Roast Level&lt;br /&gt;
Oil &lt;br /&gt;
Main view shown&lt;br /&gt;
%s pressed&lt;br /&gt;
Making not allowed for selftest build&lt;br /&gt;
Making cannot be started now&lt;br /&gt;
Starting up...&lt;br /&gt;
Final check...&lt;br /&gt;
Warming up...&lt;br /&gt;
eCooking...&lt;br /&gt;
Pausing...&lt;br /&gt;
Use + or - and press PLAY!&lt;br /&gt;
Invalid Configuration (Status: 0x%X)&lt;br /&gt;
Device ID: 0x%X&lt;br /&gt;
MADCTL: 0x%X&lt;br /&gt;
Pixel Format: 0x%X&lt;br /&gt;
ID: 0x%X&lt;br /&gt;
!&amp;quot;##$%&amp;amp;&#039;())*+,-./12345689:;=&amp;gt;?ABDEGIJLNOQSUWYZ&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=272</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=272"/>
		<updated>2024-09-14T19:30:38Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* SPI dump */ DATA!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump (blank/wiped?) ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post boot re-dump ===&lt;br /&gt;
&lt;br /&gt;
After looking at the size of the firmware, the configuration of the PIC32 and other factors, setup a new test to do a minimal boot. Using a chip clip and the Tigard I was able to verify 3v3 power rail, convenient LED and test points labeled 3v3. Probing a bit more was able to identify 5v LED and test point along with easily accessible pins via connection headers that are currently disconnected form their respective components. The 5v rail can be tapped from Pin 4 on PM5 and ground Pin 4 on PM1. I used the pin from another micro-controller pulled directly from the USB connection to bring up the 5v rail and the chip clip and Tigard in the previous configuration for the 3v3. Both of these power rails are isolated and able to use a common ground.&lt;br /&gt;
&lt;br /&gt;
I reconnected the LCD &amp;amp; Capcitive Touch flat flexes on the main board ZEM0021-0x and powered up the 3v3 &amp;amp; 5v and released the PIC32 MCLR from ground to disable the reset state. In this configuration there are no other connectors or power sources attached and after a few seconds you get the customer powering on beep and a blank screen. The LCD then turns on and a &amp;lt;code&amp;gt;Trouble powering on! (0x7)&amp;lt;/code&amp;gt; message is displayed, followed moments later by a continuous beep and a power cycle loop continually trying to restart itself.&lt;br /&gt;
&lt;br /&gt;
Now trying to use the previous method of reading the 8MB SPI flash, with MCLR grounded, results in no devices being detected. Disconnecting the LCD, Capacitive Touch, and 5v supply once again enumerates the SPI memory and it can be read out to a local file. This time it appears to have actual data following all zeros up to 000dffff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 458752 -n 1681 roti-b_3v&lt;br /&gt;
00070000  40 5a 80 bf 64 10 88 bf  68 10 88 bf 34 10 88 bf  |@Z..d...h...4...|&lt;br /&gt;
00070010  5c 67 50 f1 7c a2 c4 64  1b 23 00 6b 50 f1 7c c2  |\gP.|..d.#.kP.|.|&lt;br /&gt;
00070020  00 6b 70 f1 60 da 70 f1  64 c2 70 f1 65 c2 3a 18  |.kp.`.p.d.p.e.:.|&lt;br /&gt;
00070030  eb 3e 08 6c 3a 18 3d 59  08 6c 3a 18 77 7c 08 6c  |.&amp;gt;.l:.=Y.l:.w|.l|&lt;br /&gt;
00070040  05 b2 00 6c 03 6d 14 6e  0e 6f 3a 18 d0 46 04 d2  |...l.m.n.o:..F..|&lt;br /&gt;
00070050  44 64 a0 e8 80 3a 07 9d  6f 45 11 eb 0e 5b f5 64  |Dd...:..oE...[.d|&lt;br /&gt;
00070060  25 67 19 60 0f 68 8c e8  14 6c 3a 18 90 d0 04 d3  |%g.`.h...l:.....|&lt;br /&gt;
00070070  40 6c 3a 18 90 d0 0d ec  04 93 3a 18 90 d0 83 67  |@l:.......:....g|&lt;br /&gt;
00070080  07 b2 09 e2 80 a2 3a 18  90 d0 ff 49 01 48 0f 6a  |......:....I.H.j|&lt;br /&gt;
00070090  11 e9 4c e8 f5 29 75 64  a0 e8 00 65 78 21 01 a0  |..L..)ud...ex!..|&lt;br /&gt;
000700a0  e5 64 00 6a 1c 67 51 f0  40 c0 51 f0 00 48 7d 67  |.d.j.gQ.@.Q..H}g|&lt;br /&gt;
000700b0  41 c0 20 6a 50 c3 77 6a  4b ea 51 c3 04 04 0a b2  |A. jP.wjK.Q.....|&lt;br /&gt;
000700c0  00 6d 05 d0 3a 18 f4 c6  06 d2 78 6a 7d 67 4b ea  |.m..:.....xj}gK.|&lt;br /&gt;
000700d0  01 48 04 04 01 6d 05 d0  3a 18 f4 c6 51 c3 65 64  |.H...m..:...Q.ed|&lt;br /&gt;
000700e0  a0 e8 00 65 4d a3 05 9d  03 6a 4e ec c3 64 15 2c  |...eM....jN..d.,|&lt;br /&gt;
000700f0  e1 f7 1d 4a 0b b3 40 db  0b b3 80 db 0b b3 40 db  |...J..@.......@.|&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
00074000  18 6c 05 6d 3a 18 73 85  04 6e d0 f0 5c c8 63 64  |.l.m:.s..n..\.cd|&lt;br /&gt;
00074010  a0 e8 00 65 c3 64 e0 f3  08 6c 0b b5 3a 18 eb 09  |...e.d...l..:...|&lt;br /&gt;
00074020  00 6e 3a 18 71 02 00 65  3a 18 ae c1 00 65 3a 18  |.n:.q..e:....e:.|&lt;br /&gt;
00074030  a6 86 00 65 3a 18 20 ce  00 65 3a 18 16 c8 00 65  |...e:. ..e:....e|&lt;br /&gt;
00074040  43 64 a0 e8 15 00 07 9d  c3 64 0a b4 3a 18 68 cd  |Cd.......d..:.h.|&lt;br /&gt;
00074050  00 65 3a 18 52 d8 00 65  02 6c 07 b5 3a 18 eb 09  |.e:.R..e.l..:...|&lt;br /&gt;
00074060  01 6e 64 6c 05 b5 3a 18  eb 09 01 6e 43 64 a0 e8  |.ndl..:....nCd..|&lt;br /&gt;
00074070  9d 5b 07 9d 59 42 07 9d  01 19 06 9d 5c 67 30 f7  |.[..YB......\g0.|&lt;br /&gt;
00074080  70 9a 98 6a 58 eb 0a b3  12 ea e3 64 49 e3 40 f0  |p..jX......dI.@.|&lt;br /&gt;
00074090  44 aa 09 2a 3a 18 44 d0  00 00 00 00 00 00 00 00  |D..*:.D.........|&lt;br /&gt;
000740a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The zeros continue until another section starts at &amp;lt;code&amp;gt;000a0000&amp;lt;/code&amp;gt; and there is a block of strings starting around &amp;lt;code&amp;gt;000a0f20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
$ hexdump -C -s 0x000a0f20 -n 1024 roti-b_3v&lt;br /&gt;
000a0f20  00 10 00 00 24 d5 01 9d  55 6e 64 65 66 69 6e 65  |....$...Undefine|&lt;br /&gt;
000a0f30  64 20 61 63 74 69 6f 6e  20 69 6e 20 74 68 69 73  |d action in this|&lt;br /&gt;
000a0f40  20 73 74 61 74 65 20 25  64 00 00 65 59 65 73 00  | state %d..eYes.|&lt;br /&gt;
000a0f50  4e 6f 00 00 7b 22 6f 70  63 6f 64 65 22 3a 22 62  |No..{&amp;quot;opcode&amp;quot;:&amp;quot;b|&lt;br /&gt;
000a0f60  61 74 63 68 43 6f 6d 70  6c 65 74 65 64 22 2c 22  |atchCompleted&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f70  70 61 79 6c 6f 61 64 22  3a 5b 22 25 64 22 2c 22  |payload&amp;quot;:[&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0f80  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0f90  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fa0  22 2c 22 25 64 22 2c 22  25 2e 31 66 22 2c 22 25  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fb0  2e 31 66 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |.1f&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a0fc0  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a0fd0  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a0fe0  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a0ff0  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1000  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1010  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1020  64 22 2c 22 25 64 22 2c  22 25 64 22 2c 22 25 64  |d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d|&lt;br /&gt;
000a1030  22 2c 22 25 64 22 2c 22  25 64 22 2c 22 25 64 22  |&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;|&lt;br /&gt;
000a1040  2c 22 25 64 22 2c 22 25  64 22 2c 22 25 64 22 2c  |,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,|&lt;br /&gt;
000a1050  22 25 64 22 2c 22 25 64  22 2c 22 25 64 22 2c 22  |&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;|&lt;br /&gt;
000a1060  25 64 22 2c 22 25 64 22  2c 22 25 64 22 2c 22 25  |%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%d&amp;quot;,&amp;quot;%|&lt;br /&gt;
000a1070  2e 31 66 22 2c 22 25 2e  31 66 22 2c 22 25 2e 31  |.1f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1|&lt;br /&gt;
000a1080  66 22 2c 22 25 2e 31 66  22 2c 22 25 2e 31 66 22  |f&amp;quot;,&amp;quot;%.1f&amp;quot;,&amp;quot;%.1f&amp;quot;|&lt;br /&gt;
000a1090  5d 7d 00 00 50 6f 77 65  72 20 73 65 74 74 69 6e  |]}..Power settin|&lt;br /&gt;
000a10a0  67 73 0a 69 73 20 6e 6f  74 20 73 75 70 70 6f 72  |gs.is not suppor|&lt;br /&gt;
000a10b0  74 65 64 2e 0a 49 20 61  6d 20 69 6e 20 50 72 6f  |ted..I am in Pro|&lt;br /&gt;
000a10c0  64 75 63 74 69 6f 6e 20  4d 6f 64 65 2e 00 00 65  |duction Mode...e|&lt;br /&gt;
000a10d0  50 6f 77 65 72 20 73 65  74 74 69 6e 67 73 20 69  |Power settings i|&lt;br /&gt;
000a10e0  73 20 6e 6f 74 20 73 75  70 70 6f 72 74 65 64 20  |s not supported |&lt;br /&gt;
000a10f0  28 50 52 4f 44 29 00 00  49 20 61 6d 20 61 6c 72  |(PROD)..I am alr|&lt;br /&gt;
000a1100  65 61 64 79 20 6f 70 65  72 61 74 69 6e 67 20 69  |eady operating i|&lt;br /&gt;
000a1110  6e 0a 74 68 65 20 6f 70  74 69 6d 61 6c 20 70 6f  |n.the optimal po|&lt;br /&gt;
000a1120  77 65 72 20 6d 6f 64 65  2e 00 00 65 50 6f 77 65  |wer mode...ePowe|&lt;br /&gt;
000a1130  72 20 73 65 74 74 69 6e  67 73 20 69 73 20 6e 6f  |r settings is no|&lt;br /&gt;
000a1140  74 20 73 75 70 70 6f 72  74 65 64 00 49 74 6f 72  |t supported.Itor|&lt;br /&gt;
000a1150  53 65 72 76 20 6e 6f 74  20 69 6e 20 63 6f 72 72  |Serv not in corr|&lt;br /&gt;
000a1160  65 63 74 20 73 74 61 74  65 20 28 25 75 29 00 00  |ect state (%u)..|&lt;br /&gt;
000a1170  49 27 6d 20 61 6c 72 65  61 64 79 20 63 6f 6e 6e  |I&#039;m already conn|&lt;br /&gt;
000a1180  65 63 74 65 64 0a 74 6f  20 22 25 73 22 2e 0a 44  |ected.to &amp;quot;%s&amp;quot;..D|&lt;br /&gt;
000a1190  6f 20 79 6f 75 20 77 61  6e 74 20 6d 65 20 74 6f  |o you want me to|&lt;br /&gt;
000a11a0  0a 73 77 69 74 63 68 20  74 6f 20 61 6e 6f 74 68  |.switch to anoth|&lt;br /&gt;
000a11b0  65 72 20 6e 65 74 77 6f  72 6b 3f 00 2a 00 00 65  |er network?.*..e|&lt;br /&gt;
000a11c0  25 73 2c 20 25 73 00 00  25 73 20 73 65 6c 65 63  |%s, %s..%s selec|&lt;br /&gt;
000a11d0  74 65 64 00 0a 53 74 6f  70 70 69 6e 67 20 6f 6e  |ted..Stopping on|&lt;br /&gt;
000a11e0  67 6f 69 6e 67 20 70 72  6f 63 65 73 73 2e 2e 2e  |going process...|&lt;br /&gt;
000a11f0  00 00 00 65 47 69 6d 6d  65 20 61 20 73 65 63 21  |...eGimme a sec!|&lt;br /&gt;
000a1200  00 00 00 65 49 20 61 6d  20 73 74 69 6c 6c 20 73  |...eI am still s|&lt;br /&gt;
000a1210  74 6f 70 70 69 6e 67 20  63 6f 6f 6b 69 6e 67 21  |topping cooking!|&lt;br /&gt;
000a1220  00 00 00 65 4e 6f 20 76  61 6c 69 64 20 72 65 63  |...eNo valid rec|&lt;br /&gt;
000a1230  69 70 65 73 20 66 6f 75  6e 64 20 69 6e 20 52 6f  |ipes found in Ro|&lt;br /&gt;
000a1240  74 69 6d 61 74 69 63 00  25 64 29 20 30 78 25 30  |timatic.%d) 0x%0|&lt;br /&gt;
000a1250  32 78 20 25 73 00 00 65  46 6c 6f 75 72 20 64 61  |2x %s..eFlour da|&lt;br /&gt;
000a1260  74 61 20 69 73 20 69 6e  76 61 6c 69 64 20 66 6f  |ta is invalid fo|&lt;br /&gt;
000a1270  72 20 52 65 63 69 70 65  20 25 64 20 69 6e 20 52  |r Recipe %d in R|&lt;br /&gt;
000a1280  6f 74 69 6d 61 74 69 63  00 00 00 65 44 6f 20 79  |otimatic...eDo y|&lt;br /&gt;
000a1290  6f 75 20 77 61 6e 74 20  74 6f 0a 70 6f 77 65 72  |ou want to.power|&lt;br /&gt;
000a12a0  20 6f 66 66 20 6d 61 63  68 69 6e 65 3f 00 00 65  | off machine?..e|&lt;br /&gt;
000a12b0  44 6f 20 79 6f 75 20 77  61 6e 74 20 74 6f 20 70  |Do you want to p|&lt;br /&gt;
000a12c0  6f 77 65 72 20 6f 66 66  20 6d 61 63 68 69 6e 65  |ower off machine|&lt;br /&gt;
000a12d0  3f 00 00 65 50 69 7a 7a  61 20 62 61 73 65 20 69  |?..ePizza base i|&lt;br /&gt;
000a12e0  73 20 6f 6e 20 74 68 65  20 68 6f 74 20 70 61 6e  |s on the hot pan|&lt;br /&gt;
000a12f0  73 2c 20 70 6c 65 61 73  65 0a 70 69 63 6b 20 69  |s, please.pick i|&lt;br /&gt;
000a1300  74 20 75 70 20 69 6d 6d  65 64 69 61 74 65 6c 79  |t up immediately|&lt;br /&gt;
000a1310  20 74 6f 20 61 76 6f 69  64 0a 6f 76 65 72 63 6f  | to avoid.overco|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=271</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=271"/>
		<updated>2024-09-14T03:35:31Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: binwalk&amp;#039;n&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiple attempts with tweaks to HOLD, CS, WP net the same seemingly empty dump of a 3 byte sequence. Putting this on pause and examining firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&lt;br /&gt;
Will explore extracting onboard firmware from PIC32MX470F512L via P8 connection on main ZEM0021-0x board once PIC programmer is in hand.&lt;br /&gt;
&lt;br /&gt;
In the meantime a &amp;quot;current&amp;quot; copy of the firmware image for use by updating via a USB thumb stick has been attained for exploration.&lt;br /&gt;
&lt;br /&gt;
=== 1_20_19.zip ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
0             0x0             Zip archive data, at least v2.0 to extract,&lt;br /&gt;
                                compressed size: 286277,&lt;br /&gt;
                                uncompressed size: 520192,&lt;br /&gt;
                                name: update.img&lt;br /&gt;
286373        0x45EA5         End of Zip archive, footer length: 22&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Image file appears to contain a signed firmware for the device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DECIMAL       HEXADECIMAL     DESCRIPTION&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
105156        0x19AC4         PEM certificate&lt;br /&gt;
105332        0x19B74         PEM certificate request&lt;br /&gt;
105400        0x19BB8         PEM RSA private key&lt;br /&gt;
105464        0x19BF8         PEM EC private key&lt;br /&gt;
105660        0x19CBC         PEM DSA private key&lt;br /&gt;
149248        0x24700         DES SP1, little endian&lt;br /&gt;
149504        0x24800         DES SP2, little endian&lt;br /&gt;
219508        0x35974         CRC32 polynomial table, little endian&lt;br /&gt;
356960        0x57260         SHA256 hash constants, little endian&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=270</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=270"/>
		<updated>2024-09-14T03:09:02Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* SPI dump */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
Or toggle between pulled high or low with 10k resistor as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory hexdump ===&lt;br /&gt;
&lt;br /&gt;
The 8MB of data read only contains 0x70 0x17 0x1c over and over and over.&lt;br /&gt;
&lt;br /&gt;
Here is a dump of the first 256 bytes, is the same until the end of the file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ hexdump -n 256 -C roti-b&lt;br /&gt;
00000000  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000010  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000020  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000030  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000040  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000050  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000060  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
00000070  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
00000080  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
00000090  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000a0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000b0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000c0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
000000d0  17 1c 70 17 1c 70 17 1c  70 17 1c 70 17 1c 70 17  |..p..p..p..p..p.|&lt;br /&gt;
000000e0  1c 70 17 1c 70 17 1c 70  17 1c 70 17 1c 70 17 1c  |.p..p..p..p..p..|&lt;br /&gt;
000000f0  70 17 1c 70 17 1c 70 17  1c 70 17 1c 70 17 1c 70  |p..p..p..p..p..p|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=269</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=269"/>
		<updated>2024-09-14T02:26:36Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* SPI dump */ revised float/ground Chip Select&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
PIC32 held in reset by connecting MCLR to ground via pins 1 &amp;amp; 3 on P8 (presumably populated factory programming header)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Revised process, leave Chip Select floating, works first time on power cycle. Momentarily ground thru 10k resistor to reset for additional commands/queries.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
8388608&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=268</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=268"/>
		<updated>2024-09-14T02:20:18Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* SPI dump */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
Initial attempt with chip in circuit, 3v3 power from Tigard, WP &amp;amp; HOLD tied together with 10k resistor and HOLD 10k to ground.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Same setup as above, no device detected initially. Pulled Chip Select high then low thru 10k resistor and then...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r roti-b&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
Block protection could not be disabled!&lt;br /&gt;
Reading flash... done.&lt;br /&gt;
Error: WIP bit after WRSR never cleared&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated 8MB file, saved to disk.&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=267</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=267"/>
		<updated>2024-09-14T02:14:56Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: SPI probing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
== Original Teardown ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPI dump ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-name&lt;br /&gt;
flashrom is free software, get the source code at https://flashrom.org&lt;br /&gt;
&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Eon flash chip &amp;quot;EN25QH64&amp;quot; (8192 kB, SPI) on ft2232_spi.&lt;br /&gt;
vendor=&amp;quot;Eon&amp;quot; name=&amp;quot;EN25QH64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
~/tigard/roti$ sudo flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 --flash-size&lt;br /&gt;
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).&lt;br /&gt;
Found Generic flash chip &amp;quot;unknown SPI chip (RDID)&amp;quot; (0 kB, SPI) on ft2232_spi.&lt;br /&gt;
===&lt;br /&gt;
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE&lt;br /&gt;
This flash part has status UNTESTED for operations: WP&lt;br /&gt;
0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Repair Budgeting ==&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=266</id>
		<title>Rotimatic</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Rotimatic&amp;diff=266"/>
		<updated>2024-09-14T01:07:56Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: init(&amp;#039;II&amp;#039;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All your roti&#039;s are belong to teh hackz0R!&lt;br /&gt;
&lt;br /&gt;
[[User:Beau-K6eau|Profile / Other Projects]]&lt;br /&gt;
&lt;br /&gt;
ThanX Vinita for dropping a rabbit hole in the lab  ;+)&lt;br /&gt;
&lt;br /&gt;
https://wiki.recessim.com/view/Roti_making_robot_rotimatic&lt;br /&gt;
&lt;br /&gt;
...and now for Round II&lt;br /&gt;
&lt;br /&gt;
* $60 busted up broken up rotimatic&lt;br /&gt;
* $62 Kneading/Stirrer Cup†&lt;br /&gt;
* $60 Flour Container†&lt;br /&gt;
* $39 Water Container†&lt;br /&gt;
* $35 Oil Container†&lt;br /&gt;
* $45 Front Door†&lt;br /&gt;
* $37 Dough Tray†&lt;br /&gt;
* $52 Kicker Pad†&lt;br /&gt;
** $390 Sub Total Machine &amp;amp; Parts&lt;br /&gt;
* $7.99 Disinfecting Wipes&lt;br /&gt;
* $3.49 Isopropyl Alcohol&lt;br /&gt;
* $3.99 Pack of Sharpies&lt;br /&gt;
* $13.99 Lube&lt;br /&gt;
* $20 gas to here and there&lt;br /&gt;
** $439.46 Estimated Total ($1,599/$1,399 new/re-manufactured)†&lt;br /&gt;
&lt;br /&gt;
† Parts priced from rotimatic.com&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=265</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=265"/>
		<updated>2024-09-14T00:27:34Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: press/hackaday&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
beau (dot) ambur (at) hackerdojo (dot) com&lt;br /&gt;
&lt;br /&gt;
call/txt: +1 413-370-00{eight}{eight}&lt;br /&gt;
&lt;br /&gt;
Floating balloons around the world: https://hackaday.io/project/190775-high-altitude-balloon-tracker-wspr-aprs&lt;br /&gt;
&lt;br /&gt;
I also volunteer and mentor: https://hackaday.com/2019/07/19/hackaday-prize-mentor-session-beau-ambur/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MQ-2 &amp;quot;Alcohol&amp;quot; Sensor ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
from neopixel import NeoPixel&lt;br /&gt;
&lt;br /&gt;
led_pin = Pin(5, Pin.OUT, value=0)&lt;br /&gt;
neo_pin = Pin(4, Pin.OUT)&lt;br /&gt;
adc_pin = ADC(0)&lt;br /&gt;
led_pin.on()&lt;br /&gt;
np = NeoPixel(neo_pin, 1)&lt;br /&gt;
np[0] = (0, 22, 0)&lt;br /&gt;
np.write()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  a, b, c = 0, 0, 0&lt;br /&gt;
  while 1:&lt;br /&gt;
    a = adc_pin.read()&lt;br /&gt;
    b = int((a - 200) / 4.0)&lt;br /&gt;
    if b &amp;lt; 0: b = 0&lt;br /&gt;
    if b &amp;gt; 255: b = 255&lt;br /&gt;
    if b &amp;gt; 0 and b &amp;lt; 100:&lt;br /&gt;
      c = int(b / 2.0)&lt;br /&gt;
    else:&lt;br /&gt;
      c = 0&lt;br /&gt;
    print(a, b, c)&lt;br /&gt;
    np[0] = (b, c, 0)&lt;br /&gt;
    np.write()&lt;br /&gt;
    sleep_ms(200)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lights up RGB on Blunk Board based on gas sensor value, sensitive to flammable gases and demonstrates well with isopropyl vapor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Thursday April 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* PRUSA MINI&lt;br /&gt;
** Loaded Grey PLA&lt;br /&gt;
** Printing Knobs 4x (uProber)&lt;br /&gt;
** Printing Smaller Box (uProber)&lt;br /&gt;
* Prusa i3 MK3&lt;br /&gt;
** Printing Pieces (6) (uProber)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday January 21st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* #hacker-volunteer&lt;br /&gt;
* Series 1 Pro 10672, extruder, heat bead and all axis tested&lt;br /&gt;
* Swapped pi monitor to 24&amp;quot;&lt;br /&gt;
* general clean and sort table tops&lt;br /&gt;
* fpga class &amp;amp; robo kids&lt;br /&gt;
* configuring dump1090 w/mapping&lt;br /&gt;
** FlightAware 219009 on-line&lt;br /&gt;
* Assembly of supercon blue badges&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 18th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Picking up IC-706 from QSV bench&lt;br /&gt;
** TODO: replace with QB 25&lt;br /&gt;
* Taking out random box of trash&lt;br /&gt;
* Powered Mo Bot, some issues, parked next to shelf&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=264</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=264"/>
		<updated>2024-09-14T00:24:02Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: contact&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
beau (dot) ambur (at) hackerdojo (dot) com&lt;br /&gt;
&lt;br /&gt;
call/txt: +1 413-370-00{eight}{eight}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MQ-2 &amp;quot;Alcohol&amp;quot; Sensor ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
from neopixel import NeoPixel&lt;br /&gt;
&lt;br /&gt;
led_pin = Pin(5, Pin.OUT, value=0)&lt;br /&gt;
neo_pin = Pin(4, Pin.OUT)&lt;br /&gt;
adc_pin = ADC(0)&lt;br /&gt;
led_pin.on()&lt;br /&gt;
np = NeoPixel(neo_pin, 1)&lt;br /&gt;
np[0] = (0, 22, 0)&lt;br /&gt;
np.write()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  a, b, c = 0, 0, 0&lt;br /&gt;
  while 1:&lt;br /&gt;
    a = adc_pin.read()&lt;br /&gt;
    b = int((a - 200) / 4.0)&lt;br /&gt;
    if b &amp;lt; 0: b = 0&lt;br /&gt;
    if b &amp;gt; 255: b = 255&lt;br /&gt;
    if b &amp;gt; 0 and b &amp;lt; 100:&lt;br /&gt;
      c = int(b / 2.0)&lt;br /&gt;
    else:&lt;br /&gt;
      c = 0&lt;br /&gt;
    print(a, b, c)&lt;br /&gt;
    np[0] = (b, c, 0)&lt;br /&gt;
    np.write()&lt;br /&gt;
    sleep_ms(200)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lights up RGB on Blunk Board based on gas sensor value, sensitive to flammable gases and demonstrates well with isopropyl vapor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Thursday April 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* PRUSA MINI&lt;br /&gt;
** Loaded Grey PLA&lt;br /&gt;
** Printing Knobs 4x (uProber)&lt;br /&gt;
** Printing Smaller Box (uProber)&lt;br /&gt;
* Prusa i3 MK3&lt;br /&gt;
** Printing Pieces (6) (uProber)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday January 21st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* #hacker-volunteer&lt;br /&gt;
* Series 1 Pro 10672, extruder, heat bead and all axis tested&lt;br /&gt;
* Swapped pi monitor to 24&amp;quot;&lt;br /&gt;
* general clean and sort table tops&lt;br /&gt;
* fpga class &amp;amp; robo kids&lt;br /&gt;
* configuring dump1090 w/mapping&lt;br /&gt;
** FlightAware 219009 on-line&lt;br /&gt;
* Assembly of supercon blue badges&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 18th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Picking up IC-706 from QSV bench&lt;br /&gt;
** TODO: replace with QB 25&lt;br /&gt;
* Taking out random box of trash&lt;br /&gt;
* Powered Mo Bot, some issues, parked next to shelf&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Template:Huge&amp;diff=187</id>
		<title>Template:Huge</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Template:Huge&amp;diff=187"/>
		<updated>2024-04-06T15:47:48Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: Created page with &amp;quot;{{safesubst&amp;lt;noinclude /&amp;gt;:#switch: {{{valign|sub}}}  | normal = &amp;lt;span style=&amp;quot;line-height:{{{3|{{{2|180%}}}}}}&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:{{{2|180%}}};&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;  | super = &amp;lt;span style=&amp;quot;vertical-align:super;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;vertical-align:super;line-height:{{{3|{{{2|180%}}}}}}&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:{{{2|180%}}}; vertical-align:super;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;  | sub = &amp;lt;span style=&amp;quot;vertical-align:sub;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;vertical-align:sub;line-height:{{{3|{{{2|180%...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{safesubst&amp;lt;noinclude /&amp;gt;:#switch: {{{valign|sub}}}&lt;br /&gt;
 | normal = &amp;lt;span style=&amp;quot;line-height:{{{3|{{{2|180%}}}}}}&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:{{{2|180%}}};&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 | super = &amp;lt;span style=&amp;quot;vertical-align:super;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;vertical-align:super;line-height:{{{3|{{{2|180%}}}}}}&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:{{{2|180%}}}; vertical-align:super;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 | sub = &amp;lt;span style=&amp;quot;vertical-align:sub;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;vertical-align:sub;line-height:{{{3|{{{2|180%}}}}}}&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:{{{2|180%}}}; vertical-align:sub;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;vertical-align:sub;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;vertical-align:sub;line-height:{{{3|{{{2|180%}}}}}}&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-size:{{{2|180%}}}; vertical-align:sub;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Please add categories to the /doc subpage; interwikis go to Wikidata, thank you. --&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=Laser_Cutter&amp;diff=186</id>
		<title>Laser Cutter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=Laser_Cutter&amp;diff=186"/>
		<updated>2024-04-06T15:47:38Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{huge|TODO: UPDATE ME}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Why Use the Laser Cutter?==&lt;br /&gt;
The laser cutter can be used to precision cut some materials up to 0.25 inches thick. The cuts are computer controlled and thus repeatable. A well focused laser with the correct power and speed will cut a kerf of 0.002 inches in 3mm material.&lt;br /&gt;
&lt;br /&gt;
The laser can also be used to mark items by raster scanning an image over the surface. It works in much the way an inkjet printer works, but the laser is used to burn off little bits of the surface of the material to mark the image. The laser is very powerful, but by carefully using a very slight amount of laser power, subtle effects can be achieved. &lt;br /&gt;
&lt;br /&gt;
==Access to the Dojo Laser==&lt;br /&gt;
A Dojo member must successfully complete a Dojo Laser Operation Class before using the laser cutter; this is to keep us all safe and the machine running well. Classes are scheduled on an ad hoc basis. If you would like to attend one, post a note to the #laser channel on Slack. &lt;br /&gt;
&lt;br /&gt;
===Reserving the Laser Cutter===&lt;br /&gt;
Dojo members can reserve time on the laser by using the &#039;&#039;Book Amenities&#039;&#039; icon on your [https://dashboard.hackerdojo.com HD Dashboard]. A Dojo member may reserve up to &#039;&#039;&#039;3 hours&#039;&#039;&#039; at a time, twice a week, for a total of &#039;&#039;&#039;6 hours a week&#039;&#039;&#039;. If the machine is not reserved, then other members may use it. If you have used your 6 hours in a week, you should not start long laser jobs - if another Dojo member requests access you should let them have the laser within 30 minutes of when they asked for it. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you make a reservation and know you won&#039;t keep it, then it&#039;s your responsibility to the community to remove your reservation from the system - don&#039;t tie up the laser for a reservation that you won&#039;t use. Also note that if your job starts running long, you should adjust the end time of your reservation. The reservation system is how we communicate; please use it. If someone abuses the reservation system, they could be denied use of the machine. &lt;br /&gt;
&lt;br /&gt;
===Laser Support===&lt;br /&gt;
If you plan on using the laser cutter, join and monitor the #laser channel in the Dojo Slack, also available on your [https://dashboard.hackerdojo.com HD Dashboard]. You can ask questions or post updates that the community needs to know. &lt;br /&gt;
&lt;br /&gt;
==Safety==&lt;br /&gt;
This machine is dangerous. Used incorrectly it can cause permanent damage to you or other people in the building. As a result of this shared danger, we all have the responsibility to police each other. We each have a duty to question anyone using the laser in a way we feel unsafe. If you are using this machine in an unsafe manner, your laser cutting privileges will be restricted and may result in banishment from the Dojo.&lt;br /&gt;
&lt;br /&gt;
Members are allowed to question any laser cutting operator about the materials they are cutting. If you are operating the laser and someone questions you about the safety of your operation, you should not be offended. If someone asks you to stop what you are doing, for any reason, then you must pause your laser job and discuss their concern. If you cannot resolve the concern between the two parties, then seek out a third party. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bottom line: No matter what you are doing on the laser, no matter how important your job is, if someone asks you to stop it for a safety concern, you are obligated to stop IMMEDIATELY. If you do not, then yo may lose your access to the laser cutter even if you are later proven correct.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Basic Safety Rules===&lt;br /&gt;
In general these rules apply to the Makerspace.&lt;br /&gt;
&lt;br /&gt;
*Do not enter the Makerspace intoxicated.&lt;br /&gt;
*Food and drinks are not allowed in the Makerspace.&lt;br /&gt;
*Do no lean on the tools or machines i.e. the laser cover is somewhat fragile and can bend (our cover is already bent.&lt;br /&gt;
*Wear appropriate attire i.e. close toed shoes; protective clothing or gloves; eyewear, breathing masks or earplugs if necessary.&lt;br /&gt;
&lt;br /&gt;
===Operational Safety Rules===&lt;br /&gt;
This is all covered in the class and documentation, but restated here because it is so important.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Never leave the laser cutter unattended.&#039;&#039;&#039; &lt;br /&gt;
**You are responsible for monitoring your work and the safety of the space while you use the tools and machines in the Makerspace.&lt;br /&gt;
*&#039;&#039;&#039;Never cut PVC or chlorinated plastic.&#039;&#039;&#039; &lt;br /&gt;
**You should &#039;&#039;&#039;ALWAYS&#039;&#039;&#039; know what material you are cutting. As the laser cuts/burns some materials can produce highly poisonous and toxic byproducts. &lt;br /&gt;
*&#039;&#039;&#039;Do not try to cut metal in the laser cutter.&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Complete a routine check before cutting.&#039;&#039;&#039; &lt;br /&gt;
**Check that the lense is clean and that the standard functions are all properly working before starting your cut. If you continue to use the laser in a damaged state it will only make the matters worse.&lt;br /&gt;
*&#039;&#039;&#039;Know how to stop the machine and what to do in the case of a fire.&#039;&#039;&#039; &lt;br /&gt;
**To turn off the laser, simply open the lid of the laser cutter. If you want to keep the lid closed, you can press and hold the pause button.&lt;br /&gt;
*&#039;&#039;&#039;If there is a fire:&#039;&#039;&#039;&lt;br /&gt;
**Open lid to stop the laser.&lt;br /&gt;
**Move the material away from the laser head&lt;br /&gt;
**Press the red emergency stop button on the top right of the machine&lt;br /&gt;
**Use the fire extinguisher (it is located on the wall to the right of the laser cutter).&lt;br /&gt;
**If you cannot put out the fire or feel that you are in danger, call 911&lt;br /&gt;
&lt;br /&gt;
===Specific Safety for the Thunder Laser===&lt;br /&gt;
*&#039;&#039;&#039;The Thunder Laser will fire one pulse AFTER turning off the power switch. Do not turn on or off the laser until you have closed the laser proof safety cover.&#039;&#039;&#039; &lt;br /&gt;
**Keep your hands and projects away from the laser head while turning on and off this machine.&lt;br /&gt;
*&#039;&#039;&#039;Do not operate the Thunder Laser with the front panel open.&#039;&#039;&#039; &lt;br /&gt;
**Though this machine has the ability to operate with the front panel open, it puts everyone at risk. If this laser is operated with ANY of the covers off the laser can fire. It can bounce off a reflective surface and create a fire anywhere the beam lands. As a result, we do not allow the use of the laser with the front panel open, except in the presence of an expert and with approval from the Hardware Committee. &lt;br /&gt;
&lt;br /&gt;
==Materials==&lt;br /&gt;
The basic cutting controls for the laser are &#039;&#039;&#039;Speed (mm/sec)&#039;&#039;&#039; and &#039;&#039;&#039;Power (% of 100 watts)&#039;&#039;&#039;. The first time you use a particular laserable material, check the suggested levels on the printouts next to the laser. These will give you a guideline, but you must experiment with different combinations of Speed and Power to find the best settings for your material. &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;best&amp;quot; combination is one that cuts without burning and without excessive smoking. Start with the suggested Speed and Power and make small test cuts. If they do not cut through increase the Power 10 ppt and reduce the Speed 10 mm/sec. Once the laser cuts through your material, consider increasing the Speed and reducing the Power. Many materials require a certain amount of time to interact with the laser and you will not be able to increase the Speed above a certain point, no matter how much Power you use. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;5&amp;quot;|Approved Materials&lt;br /&gt;
|-&lt;br /&gt;
|Untreated Wood (max. 1/4&#039;&#039;)&lt;br /&gt;
|Plywood/Composite Woods (max. 1/4&#039;&#039;)&lt;br /&gt;
|MDF/Engineered Woods (max. 1/4&#039;&#039;)&lt;br /&gt;
|Untreated Paper/Cardstock&lt;br /&gt;
|Cardboard&lt;br /&gt;
|-&lt;br /&gt;
|Acrylic/Lucite/Plexiglas/PMMA (max. 1/2&#039;&#039;)&lt;br /&gt;
|Thin PolyCarbonate Sheeting (&amp;lt; 1mm)&lt;br /&gt;
|Derlin&lt;br /&gt;
|Kapton Tape (max. 1/16&#039;&#039;)&lt;br /&gt;
|Mylar (max. 1/16&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|Cloth/Felt/Hemp/Cotton&lt;br /&gt;
|Plain Leather/Suede&lt;br /&gt;
|Magnetic Sheet&lt;br /&gt;
|NON-CHLORINE containing Rubber&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Approved Etching Materials===&lt;br /&gt;
*Glass, ONLY FLAT GLASS&lt;br /&gt;
*Ceramic Tile&lt;br /&gt;
*Anodized Aluminum&lt;br /&gt;
*Painted/Coated Metals&lt;br /&gt;
*Stone/Marble/Granite/Soapstone/Onyx&lt;br /&gt;
&lt;br /&gt;
===Restricted Materials===&lt;br /&gt;
Materials can be dangerous when laser cut or etched because of the poisonous gases generated. &lt;br /&gt;
&#039;&#039;&#039;DO NOT LASER UNKNOWN MATERIALS.&#039;&#039;&#039; If your material is not on the approved list above, you must have a Material Safety Data Sheet (MSDS) from your material supplier. &lt;br /&gt;
*PVC/Vinyl/Pleather/Artificial Leather&lt;br /&gt;
*Mirrored surfaces&lt;br /&gt;
*Polished materials&lt;br /&gt;
*Thick Polycarbonate/Lexan&lt;br /&gt;
*ABS&lt;br /&gt;
*HDPE&lt;br /&gt;
*Foam&lt;br /&gt;
*Epoxy&lt;br /&gt;
*Fiberglass&lt;br /&gt;
*Coated Carbon Fiber&lt;br /&gt;
*Food&lt;br /&gt;
*Teflon&lt;br /&gt;
&lt;br /&gt;
A third class of materials can be safely lasered but cause such a stench that they are not allowed to be laser cut at the Hacker Dojo. Since the Dojo is a shared space, we must respect the other members. If your laser safe material is generating a lot of unpleasant fumes, then you must stop. &#039;&#039;&#039;Any member of the Dojo may step into the room and ask you to stop. If they do, then you must stop.&#039;&#039;&#039; If you do not stop, you may lose access to the laser cutter.&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/document/d/1GW-jYXP5y6R_ZjpFjN9N5UMAUcuFoKIhVhLbHVWWwmI/edit Class Handout] available to anyone who takes the laser training.&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=169</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=169"/>
		<updated>2024-04-04T19:07:25Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MQ-2 &amp;quot;Alcohol&amp;quot; Sensor ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
from neopixel import NeoPixel&lt;br /&gt;
&lt;br /&gt;
led_pin = Pin(5, Pin.OUT, value=0)&lt;br /&gt;
neo_pin = Pin(4, Pin.OUT)&lt;br /&gt;
adc_pin = ADC(0)&lt;br /&gt;
led_pin.on()&lt;br /&gt;
np = NeoPixel(neo_pin, 1)&lt;br /&gt;
np[0] = (0, 22, 0)&lt;br /&gt;
np.write()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  a, b, c = 0, 0, 0&lt;br /&gt;
  while 1:&lt;br /&gt;
    a = adc_pin.read()&lt;br /&gt;
    b = int((a - 200) / 4.0)&lt;br /&gt;
    if b &amp;lt; 0: b = 0&lt;br /&gt;
    if b &amp;gt; 255: b = 255&lt;br /&gt;
    if b &amp;gt; 0 and b &amp;lt; 100:&lt;br /&gt;
      c = int(b / 2.0)&lt;br /&gt;
    else:&lt;br /&gt;
      c = 0&lt;br /&gt;
    print(a, b, c)&lt;br /&gt;
    np[0] = (b, c, 0)&lt;br /&gt;
    np.write()&lt;br /&gt;
    sleep_ms(200)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lights up RGB on Blunk Board based on gas sensor value, sensitive to flammable gases and demonstrates well with isopropyl vapor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Thursday April 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* PRUSA MINI&lt;br /&gt;
** Loaded Grey PLA&lt;br /&gt;
** Printing Knobs 4x (uProber)&lt;br /&gt;
** Printing Smaller Box (uProber)&lt;br /&gt;
* Prusa i3 MK3&lt;br /&gt;
** Printing Pieces (6) (uProber)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday January 21st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* #hacker-volunteer&lt;br /&gt;
* Series 1 Pro 10672, extruder, heat bead and all axis tested&lt;br /&gt;
* Swapped pi monitor to 24&amp;quot;&lt;br /&gt;
* general clean and sort table tops&lt;br /&gt;
* fpga class &amp;amp; robo kids&lt;br /&gt;
* configuring dump1090 w/mapping&lt;br /&gt;
** FlightAware 219009 on-line&lt;br /&gt;
* Assembly of supercon blue badges&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 18th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Picking up IC-706 from QSV bench&lt;br /&gt;
** TODO: replace with QB 25&lt;br /&gt;
* Taking out random box of trash&lt;br /&gt;
* Powered Mo Bot, some issues, parked next to shelf&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=166</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=166"/>
		<updated>2024-01-22T05:41:10Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: Gaseous sensor testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MQ-2 &amp;quot;Alcohol&amp;quot; Sensor ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
from neopixel import NeoPixel&lt;br /&gt;
&lt;br /&gt;
led_pin = Pin(5, Pin.OUT, value=0)&lt;br /&gt;
neo_pin = Pin(4, Pin.OUT)&lt;br /&gt;
adc_pin = ADC(0)&lt;br /&gt;
led_pin.on()&lt;br /&gt;
np = NeoPixel(neo_pin, 1)&lt;br /&gt;
np[0] = (0, 22, 0)&lt;br /&gt;
np.write()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  a, b, c = 0, 0, 0&lt;br /&gt;
  while 1:&lt;br /&gt;
    a = adc_pin.read()&lt;br /&gt;
    b = int((a - 200) / 4.0)&lt;br /&gt;
    if b &amp;lt; 0: b = 0&lt;br /&gt;
    if b &amp;gt; 255: b = 255&lt;br /&gt;
    if b &amp;gt; 0 and b &amp;lt; 100:&lt;br /&gt;
      c = int(b / 2.0)&lt;br /&gt;
    else:&lt;br /&gt;
      c = 0&lt;br /&gt;
    print(a, b, c)&lt;br /&gt;
    np[0] = (b, c, 0)&lt;br /&gt;
    np.write()&lt;br /&gt;
    sleep_ms(200)&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lights up RGB on Blunk Board based on gas sensor value, sensitive to flammable gases and demonstrates well with isopropyl vapor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Sunday January 21st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* #hacker-volunteer&lt;br /&gt;
* Series 1 Pro 10672, extruder, heat bead and all axis tested&lt;br /&gt;
* Swapped pi monitor to 24&amp;quot;&lt;br /&gt;
* general clean and sort table tops&lt;br /&gt;
* fpga class &amp;amp; robo kids&lt;br /&gt;
* configuring dump1090 w/mapping&lt;br /&gt;
** FlightAware 219009 on-line&lt;br /&gt;
* Assembly of supercon blue badges&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 18th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Picking up IC-706 from QSV bench&lt;br /&gt;
** TODO: replace with QB 25&lt;br /&gt;
* Taking out random box of trash&lt;br /&gt;
* Powered Mo Bot, some issues, parked next to shelf&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=165</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=165"/>
		<updated>2024-01-22T03:02:16Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Sunday January 21st, 2024 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Sunday January 21st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* #hacker-volunteer&lt;br /&gt;
* Series 1 Pro 10672, extruder, heat bead and all axis tested&lt;br /&gt;
* Swapped pi monitor to 24&amp;quot;&lt;br /&gt;
* general clean and sort table tops&lt;br /&gt;
* fpga class &amp;amp; robo kids&lt;br /&gt;
* configuring dump1090 w/mapping&lt;br /&gt;
** FlightAware 219009 on-line&lt;br /&gt;
* Assembly of supercon blue badges&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 18th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Picking up IC-706 from QSV bench&lt;br /&gt;
** TODO: replace with QB 25&lt;br /&gt;
* Taking out random box of trash&lt;br /&gt;
* Powered Mo Bot, some issues, parked next to shelf&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=164</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=164"/>
		<updated>2024-01-21T22:04:06Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Sunday January 21st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* #hacker-volunteer&lt;br /&gt;
* Series 1 Pro 10672, extruder, heat bead and all axis tested&lt;br /&gt;
* Swapped pi monitor to 24&amp;quot;&lt;br /&gt;
* general clean and sort table tops&lt;br /&gt;
* configuring dump1090 w/mapping&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 18th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Picking up IC-706 from QSV bench&lt;br /&gt;
** TODO: replace with QB 25&lt;br /&gt;
* Taking out random box of trash&lt;br /&gt;
* Powered Mo Bot, some issues, parked next to shelf&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=163</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=163"/>
		<updated>2024-01-19T04:35:12Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Log */  in-out&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 18th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Picking up IC-706 from QSV bench&lt;br /&gt;
** TODO: replace with QB 25&lt;br /&gt;
* Taking out random box of trash&lt;br /&gt;
* Powered Mo Bot, some issues, parked next to shelf&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=162</id>
		<title>QSV</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=162"/>
		<updated>2024-01-16T23:18:20Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* 2 Meter / VHF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amateur Radio in and around Mt. &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; &amp;lt;strike&amp;gt;View&amp;lt;/strike&amp;gt; along with related topics.&lt;br /&gt;
&lt;br /&gt;
== Frequencies ==&lt;br /&gt;
&lt;br /&gt;
=== 2 Meter / VHF ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table caption&lt;br /&gt;
|-&lt;br /&gt;
! Repeater&lt;br /&gt;
! MHz&lt;br /&gt;
! +/-&lt;br /&gt;
! PL&lt;br /&gt;
! Location&lt;br /&gt;
! Net&lt;br /&gt;
|-&lt;br /&gt;
! NA6MF&lt;br /&gt;
| 145.250&lt;br /&gt;
| -600&lt;br /&gt;
| 123.0&lt;br /&gt;
| Moffet Field+&lt;br /&gt;
| Tuesday Noon&lt;br /&gt;
|-&lt;br /&gt;
! W6ASH&lt;br /&gt;
| 145.270&lt;br /&gt;
| -600&lt;br /&gt;
| 100.0&lt;br /&gt;
| El Camino Hospital&lt;br /&gt;
| Monday 20:00 SPECS&lt;br /&gt;
|-&lt;br /&gt;
! N6NFI&lt;br /&gt;
| 145.230&lt;br /&gt;
| -600&lt;br /&gt;
| 100.0&lt;br /&gt;
| Stanford Dish&lt;br /&gt;
| M-F 9amtalk.net&lt;br /&gt;
|-&lt;br /&gt;
! W6LAH&lt;br /&gt;
| 146.7450&lt;br /&gt;
| -600&lt;br /&gt;
| 110.9&lt;br /&gt;
| Los Altos Hills&lt;br /&gt;
|-&lt;br /&gt;
! W6TI&lt;br /&gt;
| 147.3600&lt;br /&gt;
| +600&lt;br /&gt;
| 110.9&lt;br /&gt;
| Palo Alto, Black Mountain&lt;br /&gt;
|-&lt;br /&gt;
! WW6BAY&lt;br /&gt;
| 145.3900&lt;br /&gt;
| -600&lt;br /&gt;
| 100.0&lt;br /&gt;
| Palo Alto, Black Mountain&lt;br /&gt;
|-&lt;br /&gt;
! KM6DLG&lt;br /&gt;
| 146.0850&lt;br /&gt;
| +600&lt;br /&gt;
| 110.9&lt;br /&gt;
| Portola Valley&lt;br /&gt;
|-&lt;br /&gt;
! WA2IBM&lt;br /&gt;
| 145.1900&lt;br /&gt;
| -600&lt;br /&gt;
| 151.4&lt;br /&gt;
| Santa Teresa Foothills&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EchoLink ==&lt;br /&gt;
&lt;br /&gt;
http://echolink.org/&lt;br /&gt;
&lt;br /&gt;
https://github.com/sm0svx/svxlink&lt;br /&gt;
&lt;br /&gt;
=== Raspbery Pi 4 Debian 12 (Bookworm) ===&lt;br /&gt;
&lt;br /&gt;
* raspi-config advanced change audio to Pulse Audio&lt;br /&gt;
* set group to svxlink for /usr/bin/.config&lt;br /&gt;
* set write permission g+w for group to &amp;quot;&amp;quot;&lt;br /&gt;
* set Rx1 to &amp;lt;strike&amp;gt;NONE&amp;lt;/strike&amp;gt; config to hw:4&lt;br /&gt;
* set Tx1 to appropriate hardware device index hw:2&lt;br /&gt;
* configure with password for connecting to servers&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi.&lt;br /&gt;
* test with &amp;lt;code&amp;gt;su -u svxlink svxlink&amp;lt;/code&amp;gt;, stop systemctl as needed&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo systemctl [stop|stop|restart] svxlink.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;PTT button at station&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;Kill switch at station&lt;br /&gt;
&lt;br /&gt;
== Lawn Tennis ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lawn-Tennis-Vertical-Sync.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== QSV ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Continuing on in &amp;lt;i&amp;gt;2024&amp;lt;/i&amp;gt;, 1st Monday and 3rd Friday of the month. QTH Olympus Cafe, 12:34&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historical Announcement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1    Announcing QSV Lunch this Friday March 18 at 12:34pm.&lt;br /&gt;
     2&lt;br /&gt;
     3    QSV?&lt;br /&gt;
     4        QSV are Hams who Hack -- The intersection of Amateur Radio and&lt;br /&gt;
     5        Hacker/Maker/STEM culture, in Mountain View, California.&lt;br /&gt;
     6&lt;br /&gt;
     7    Don&#039;t all hams hack?&lt;br /&gt;
     8        Yes, probably so!&lt;br /&gt;
     9        But this defines our culture and focuses our topics.&lt;br /&gt;
    10&lt;br /&gt;
    11    Where?&lt;br /&gt;
    12        at the outdoor picnic tables of&lt;br /&gt;
    13        Olympus Caffe &amp;amp; Bakery, Mountain View.&lt;br /&gt;
    14          -- https://cafeolympus.com/&lt;br /&gt;
    15          -- https://www.openstreetmap.org/node/1306273777&lt;br /&gt;
    16        We sit towards the corner of the block (Castro at Evelyn).&lt;br /&gt;
    17&lt;br /&gt;
    18    Why There?&lt;br /&gt;
    19        * outdoor tables&lt;br /&gt;
    20        * you can come and go at will, be early, be late&lt;br /&gt;
    21        * easy to move around and chat with different people&lt;br /&gt;
    22        * order as much or as little as you like:&lt;br /&gt;
    23          -- free water&lt;br /&gt;
    24          -- coffee and tea&lt;br /&gt;
    25          -- turkish pastries and european/american desserts&lt;br /&gt;
    26          -- wide variety of breakfasts, lunches, and dinners&lt;br /&gt;
    27             https://cafeolympus.com/breakfast&lt;br /&gt;
    28             https://cafeolympus.com/lunch-%26-dinner&lt;br /&gt;
    29          -- including gyro/kebap/kofte/souvlaki&lt;br /&gt;
    30          -- German beers and Biergarten Speisen (Wurst, Schnitzel,usw)&lt;br /&gt;
    31             https://dasbierhauz.com/burger-%26-sausage&lt;br /&gt;
    32        * order and pay at the counter, take a number,&lt;br /&gt;
    33              and they bring it out to you.  So no waiting on the check.&lt;br /&gt;
    34        * right next to light rail and loud caltrains and VTA transit center&lt;br /&gt;
    35&lt;br /&gt;
    36    How Often?&lt;br /&gt;
    37        Our current schedule is&lt;br /&gt;
    38          -- First Mondays&lt;br /&gt;
    39                  and&lt;br /&gt;
    40          -- Third Fridays&lt;br /&gt;
    41                  always at 12:34pm.&lt;br /&gt;
    42&lt;br /&gt;
    43    Keep me informed?&lt;br /&gt;
    44        Subscribe at https://groups.io/g/qsv&lt;br /&gt;
    45        if you want to receive updates.&lt;br /&gt;
    46&lt;br /&gt;
    47    Questions?  Ask W6REK or K6EAU.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ham_string ==&lt;br /&gt;
&lt;br /&gt;
point to point wireless backbone for regional mesh&lt;br /&gt;
&lt;br /&gt;
Done right would be AI6KG &amp;amp; W6MRR concurring an excellent solution.&lt;br /&gt;
&lt;br /&gt;
VHF/UHF/900-915MHz/2.4GHz/5.8GHz/10GHz/60GHz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://9amtalk.net/&lt;br /&gt;
&lt;br /&gt;
https://labitat.dk/wiki/WSPR&lt;br /&gt;
&lt;br /&gt;
https://www.noisebridge.net/wiki/HAM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TBD ==&lt;br /&gt;
*Balloons&lt;br /&gt;
*Licensing&lt;br /&gt;
*Events&lt;br /&gt;
*SDR&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=161</id>
		<title>QSV</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=161"/>
		<updated>2024-01-16T23:15:31Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: VHF Repeaters close by&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amateur Radio in and around Mt. &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; &amp;lt;strike&amp;gt;View&amp;lt;/strike&amp;gt; along with related topics.&lt;br /&gt;
&lt;br /&gt;
== Frequencies ==&lt;br /&gt;
&lt;br /&gt;
=== 2 Meter / VHF ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Table caption&lt;br /&gt;
|-&lt;br /&gt;
! Repeater&lt;br /&gt;
! MHz&lt;br /&gt;
! +/-&lt;br /&gt;
! PL&lt;br /&gt;
! Location&lt;br /&gt;
! Net&lt;br /&gt;
|-&lt;br /&gt;
! NA6MF&lt;br /&gt;
| 145.250&lt;br /&gt;
| -600&lt;br /&gt;
| 123.0&lt;br /&gt;
| Moffet Field+&lt;br /&gt;
| Tuesday Noon&lt;br /&gt;
|-&lt;br /&gt;
! W6ASH&lt;br /&gt;
| 145.270&lt;br /&gt;
| -600&lt;br /&gt;
| 100.0&lt;br /&gt;
| El Camino Hospital&lt;br /&gt;
| Monday 20:00 SPECS&lt;br /&gt;
|-&lt;br /&gt;
! N6NFI&lt;br /&gt;
| 145.230&lt;br /&gt;
| -600&lt;br /&gt;
| 100.0&lt;br /&gt;
| Stanford Dish&lt;br /&gt;
| M-F 9amtalk.net&lt;br /&gt;
|-&lt;br /&gt;
! W6LAH&lt;br /&gt;
| 146.7450&lt;br /&gt;
| -600&lt;br /&gt;
| 110.9&lt;br /&gt;
| Los Altos Hills&lt;br /&gt;
|-&lt;br /&gt;
! W6TI&lt;br /&gt;
| 147.3600&lt;br /&gt;
| +600&lt;br /&gt;
| 110.9&lt;br /&gt;
| Palo Alto, Black Mountain&lt;br /&gt;
|-&lt;br /&gt;
! WW6BAY&lt;br /&gt;
| 145.3900&lt;br /&gt;
| -600&lt;br /&gt;
| 100.0&lt;br /&gt;
| Palo Alto, Black Mountain&lt;br /&gt;
|-&lt;br /&gt;
! KM6DLG&lt;br /&gt;
| 146.0850&lt;br /&gt;
| +600&lt;br /&gt;
| 110.9&lt;br /&gt;
| Portola Valley&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EchoLink ==&lt;br /&gt;
&lt;br /&gt;
http://echolink.org/&lt;br /&gt;
&lt;br /&gt;
https://github.com/sm0svx/svxlink&lt;br /&gt;
&lt;br /&gt;
=== Raspbery Pi 4 Debian 12 (Bookworm) ===&lt;br /&gt;
&lt;br /&gt;
* raspi-config advanced change audio to Pulse Audio&lt;br /&gt;
* set group to svxlink for /usr/bin/.config&lt;br /&gt;
* set write permission g+w for group to &amp;quot;&amp;quot;&lt;br /&gt;
* set Rx1 to &amp;lt;strike&amp;gt;NONE&amp;lt;/strike&amp;gt; config to hw:4&lt;br /&gt;
* set Tx1 to appropriate hardware device index hw:2&lt;br /&gt;
* configure with password for connecting to servers&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi.&lt;br /&gt;
* test with &amp;lt;code&amp;gt;su -u svxlink svxlink&amp;lt;/code&amp;gt;, stop systemctl as needed&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo systemctl [stop|stop|restart] svxlink.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;PTT button at station&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;Kill switch at station&lt;br /&gt;
&lt;br /&gt;
== Lawn Tennis ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lawn-Tennis-Vertical-Sync.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== QSV ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Continuing on in &amp;lt;i&amp;gt;2024&amp;lt;/i&amp;gt;, 1st Monday and 3rd Friday of the month. QTH Olympus Cafe, 12:34&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historical Announcement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1    Announcing QSV Lunch this Friday March 18 at 12:34pm.&lt;br /&gt;
     2&lt;br /&gt;
     3    QSV?&lt;br /&gt;
     4        QSV are Hams who Hack -- The intersection of Amateur Radio and&lt;br /&gt;
     5        Hacker/Maker/STEM culture, in Mountain View, California.&lt;br /&gt;
     6&lt;br /&gt;
     7    Don&#039;t all hams hack?&lt;br /&gt;
     8        Yes, probably so!&lt;br /&gt;
     9        But this defines our culture and focuses our topics.&lt;br /&gt;
    10&lt;br /&gt;
    11    Where?&lt;br /&gt;
    12        at the outdoor picnic tables of&lt;br /&gt;
    13        Olympus Caffe &amp;amp; Bakery, Mountain View.&lt;br /&gt;
    14          -- https://cafeolympus.com/&lt;br /&gt;
    15          -- https://www.openstreetmap.org/node/1306273777&lt;br /&gt;
    16        We sit towards the corner of the block (Castro at Evelyn).&lt;br /&gt;
    17&lt;br /&gt;
    18    Why There?&lt;br /&gt;
    19        * outdoor tables&lt;br /&gt;
    20        * you can come and go at will, be early, be late&lt;br /&gt;
    21        * easy to move around and chat with different people&lt;br /&gt;
    22        * order as much or as little as you like:&lt;br /&gt;
    23          -- free water&lt;br /&gt;
    24          -- coffee and tea&lt;br /&gt;
    25          -- turkish pastries and european/american desserts&lt;br /&gt;
    26          -- wide variety of breakfasts, lunches, and dinners&lt;br /&gt;
    27             https://cafeolympus.com/breakfast&lt;br /&gt;
    28             https://cafeolympus.com/lunch-%26-dinner&lt;br /&gt;
    29          -- including gyro/kebap/kofte/souvlaki&lt;br /&gt;
    30          -- German beers and Biergarten Speisen (Wurst, Schnitzel,usw)&lt;br /&gt;
    31             https://dasbierhauz.com/burger-%26-sausage&lt;br /&gt;
    32        * order and pay at the counter, take a number,&lt;br /&gt;
    33              and they bring it out to you.  So no waiting on the check.&lt;br /&gt;
    34        * right next to light rail and loud caltrains and VTA transit center&lt;br /&gt;
    35&lt;br /&gt;
    36    How Often?&lt;br /&gt;
    37        Our current schedule is&lt;br /&gt;
    38          -- First Mondays&lt;br /&gt;
    39                  and&lt;br /&gt;
    40          -- Third Fridays&lt;br /&gt;
    41                  always at 12:34pm.&lt;br /&gt;
    42&lt;br /&gt;
    43    Keep me informed?&lt;br /&gt;
    44        Subscribe at https://groups.io/g/qsv&lt;br /&gt;
    45        if you want to receive updates.&lt;br /&gt;
    46&lt;br /&gt;
    47    Questions?  Ask W6REK or K6EAU.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ham_string ==&lt;br /&gt;
&lt;br /&gt;
point to point wireless backbone for regional mesh&lt;br /&gt;
&lt;br /&gt;
Done right would be AI6KG &amp;amp; W6MRR concurring an excellent solution.&lt;br /&gt;
&lt;br /&gt;
VHF/UHF/900-915MHz/2.4GHz/5.8GHz/10GHz/60GHz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://9amtalk.net/&lt;br /&gt;
&lt;br /&gt;
https://labitat.dk/wiki/WSPR&lt;br /&gt;
&lt;br /&gt;
https://www.noisebridge.net/wiki/HAM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TBD ==&lt;br /&gt;
*Balloons&lt;br /&gt;
*Licensing&lt;br /&gt;
*Events&lt;br /&gt;
*SDR&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=160</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=160"/>
		<updated>2024-01-16T21:34:38Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 16th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Meeting with John on Microprobing class&lt;br /&gt;
* 2M Station test with N6NFI/R&lt;br /&gt;
* Installed 120 GB SATA test stick to X1 Carbon (L1)&lt;br /&gt;
* Sean &amp;amp; Charlie drop-in for drone repair&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 11th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Type A Series 1 Pro testing&lt;br /&gt;
* SATA Drive Pickup (Foster City)&lt;br /&gt;
* Evening remote visit via &amp;quot;Mo Furious&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 9th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=143</id>
		<title>QSV</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=143"/>
		<updated>2024-01-09T21:32:40Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* EchoLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amateur Radio in and around Mt. &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; &amp;lt;strike&amp;gt;View&amp;lt;/strike&amp;gt; along with related topics.&lt;br /&gt;
&lt;br /&gt;
== EchoLink ==&lt;br /&gt;
&lt;br /&gt;
http://echolink.org/&lt;br /&gt;
&lt;br /&gt;
https://github.com/sm0svx/svxlink&lt;br /&gt;
&lt;br /&gt;
=== Raspbery Pi 4 Debian 12 (Bookworm) ===&lt;br /&gt;
&lt;br /&gt;
* raspi-config advanced change audio to Pulse Audio&lt;br /&gt;
* set group to svxlink for /usr/bin/.config&lt;br /&gt;
* set write permission g+w for group to &amp;quot;&amp;quot;&lt;br /&gt;
* set Rx1 to &amp;lt;strike&amp;gt;NONE&amp;lt;/strike&amp;gt; config to hw:4&lt;br /&gt;
* set Tx1 to appropriate hardware device index hw:2&lt;br /&gt;
* configure with password for connecting to servers&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi.&lt;br /&gt;
* test with &amp;lt;code&amp;gt;su -u svxlink svxlink&amp;lt;/code&amp;gt;, stop systemctl as needed&lt;br /&gt;
* &amp;lt;code&amp;gt;sudo systemctl [stop|stop|restart] svxlink.service&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;PTT button at station&lt;br /&gt;
* &amp;lt;b&amp;gt;TODO:&amp;lt;/b&amp;gt;Kill switch at station&lt;br /&gt;
&lt;br /&gt;
== Lawn Tennis ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lawn-Tennis-Vertical-Sync.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== QSV ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Continuing on in &amp;lt;i&amp;gt;2024&amp;lt;/i&amp;gt;, 1st Monday and 3rd Friday of the month. QTH Olympus Cafe, 12:34&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historical Announcement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1    Announcing QSV Lunch this Friday March 18 at 12:34pm.&lt;br /&gt;
     2&lt;br /&gt;
     3    QSV?&lt;br /&gt;
     4        QSV are Hams who Hack -- The intersection of Amateur Radio and&lt;br /&gt;
     5        Hacker/Maker/STEM culture, in Mountain View, California.&lt;br /&gt;
     6&lt;br /&gt;
     7    Don&#039;t all hams hack?&lt;br /&gt;
     8        Yes, probably so!&lt;br /&gt;
     9        But this defines our culture and focuses our topics.&lt;br /&gt;
    10&lt;br /&gt;
    11    Where?&lt;br /&gt;
    12        at the outdoor picnic tables of&lt;br /&gt;
    13        Olympus Caffe &amp;amp; Bakery, Mountain View.&lt;br /&gt;
    14          -- https://cafeolympus.com/&lt;br /&gt;
    15          -- https://www.openstreetmap.org/node/1306273777&lt;br /&gt;
    16        We sit towards the corner of the block (Castro at Evelyn).&lt;br /&gt;
    17&lt;br /&gt;
    18    Why There?&lt;br /&gt;
    19        * outdoor tables&lt;br /&gt;
    20        * you can come and go at will, be early, be late&lt;br /&gt;
    21        * easy to move around and chat with different people&lt;br /&gt;
    22        * order as much or as little as you like:&lt;br /&gt;
    23          -- free water&lt;br /&gt;
    24          -- coffee and tea&lt;br /&gt;
    25          -- turkish pastries and european/american desserts&lt;br /&gt;
    26          -- wide variety of breakfasts, lunches, and dinners&lt;br /&gt;
    27             https://cafeolympus.com/breakfast&lt;br /&gt;
    28             https://cafeolympus.com/lunch-%26-dinner&lt;br /&gt;
    29          -- including gyro/kebap/kofte/souvlaki&lt;br /&gt;
    30          -- German beers and Biergarten Speisen (Wurst, Schnitzel,usw)&lt;br /&gt;
    31             https://dasbierhauz.com/burger-%26-sausage&lt;br /&gt;
    32        * order and pay at the counter, take a number,&lt;br /&gt;
    33              and they bring it out to you.  So no waiting on the check.&lt;br /&gt;
    34        * right next to light rail and loud caltrains and VTA transit center&lt;br /&gt;
    35&lt;br /&gt;
    36    How Often?&lt;br /&gt;
    37        Our current schedule is&lt;br /&gt;
    38          -- First Mondays&lt;br /&gt;
    39                  and&lt;br /&gt;
    40          -- Third Fridays&lt;br /&gt;
    41                  always at 12:34pm.&lt;br /&gt;
    42&lt;br /&gt;
    43    Keep me informed?&lt;br /&gt;
    44        Subscribe at https://groups.io/g/qsv&lt;br /&gt;
    45        if you want to receive updates.&lt;br /&gt;
    46&lt;br /&gt;
    47    Questions?  Ask W6REK or K6EAU.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ham_string ==&lt;br /&gt;
&lt;br /&gt;
point to point wireless backbone for regional mesh&lt;br /&gt;
&lt;br /&gt;
Done right would be AI6KG &amp;amp; W6MRR concurring an excellent solution.&lt;br /&gt;
&lt;br /&gt;
VHF/UHF/900-915MHz/2.4GHz/5.8GHz/10GHz/60GHz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://9amtalk.net/&lt;br /&gt;
&lt;br /&gt;
https://labitat.dk/wiki/WSPR&lt;br /&gt;
&lt;br /&gt;
https://www.noisebridge.net/wiki/HAM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TBD ==&lt;br /&gt;
*Balloons&lt;br /&gt;
*Licensing&lt;br /&gt;
*Events&lt;br /&gt;
*SDR&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=142</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=142"/>
		<updated>2024-01-09T21:29:03Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Tuesday January 2nd, 2024 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* &amp;lt;strike&amp;gt;1.5&amp;lt;/strike&amp;gt; 5.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process, sticking with pi route&lt;br /&gt;
** TODO: &amp;lt;b&amp;gt;Create NAT for TCP 5200 as well as UDP 5198 and 5199 to the Pi&amp;lt;/b&amp;gt;&lt;br /&gt;
* install SSD in T420 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
* install SSD in T430 ThinkPad, loaded with Debian 12, apps and config&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=141</id>
		<title>QSV</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=141"/>
		<updated>2024-01-09T20:26:19Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* EchoLink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amateur Radio in and around Mt. &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; &amp;lt;strike&amp;gt;View&amp;lt;/strike&amp;gt; along with related topics.&lt;br /&gt;
&lt;br /&gt;
== EchoLink ==&lt;br /&gt;
&lt;br /&gt;
http://echolink.org/&lt;br /&gt;
&lt;br /&gt;
https://github.com/sm0svx/svxlink&lt;br /&gt;
&lt;br /&gt;
=== Raspbery Pi 4 Debian 12 (Bookworm) ===&lt;br /&gt;
&lt;br /&gt;
* raspi-config advanced change audio to Pulse Audio&lt;br /&gt;
* set group to svxlink for /usr/bin/.config&lt;br /&gt;
* set write permission g+w for group to &amp;quot;&amp;quot;&lt;br /&gt;
* set Rx1 to NONE&lt;br /&gt;
* set Tx1 to appropriate hardware device index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lawn Tennis ==&lt;br /&gt;
&lt;br /&gt;
[[File:Lawn-Tennis-Vertical-Sync.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== QSV ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Continuing on in &amp;lt;i&amp;gt;2024&amp;lt;/i&amp;gt;, 1st Monday and 3rd Friday of the month. QTH Olympus Cafe, 12:34&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historical Announcement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1    Announcing QSV Lunch this Friday March 18 at 12:34pm.&lt;br /&gt;
     2&lt;br /&gt;
     3    QSV?&lt;br /&gt;
     4        QSV are Hams who Hack -- The intersection of Amateur Radio and&lt;br /&gt;
     5        Hacker/Maker/STEM culture, in Mountain View, California.&lt;br /&gt;
     6&lt;br /&gt;
     7    Don&#039;t all hams hack?&lt;br /&gt;
     8        Yes, probably so!&lt;br /&gt;
     9        But this defines our culture and focuses our topics.&lt;br /&gt;
    10&lt;br /&gt;
    11    Where?&lt;br /&gt;
    12        at the outdoor picnic tables of&lt;br /&gt;
    13        Olympus Caffe &amp;amp; Bakery, Mountain View.&lt;br /&gt;
    14          -- https://cafeolympus.com/&lt;br /&gt;
    15          -- https://www.openstreetmap.org/node/1306273777&lt;br /&gt;
    16        We sit towards the corner of the block (Castro at Evelyn).&lt;br /&gt;
    17&lt;br /&gt;
    18    Why There?&lt;br /&gt;
    19        * outdoor tables&lt;br /&gt;
    20        * you can come and go at will, be early, be late&lt;br /&gt;
    21        * easy to move around and chat with different people&lt;br /&gt;
    22        * order as much or as little as you like:&lt;br /&gt;
    23          -- free water&lt;br /&gt;
    24          -- coffee and tea&lt;br /&gt;
    25          -- turkish pastries and european/american desserts&lt;br /&gt;
    26          -- wide variety of breakfasts, lunches, and dinners&lt;br /&gt;
    27             https://cafeolympus.com/breakfast&lt;br /&gt;
    28             https://cafeolympus.com/lunch-%26-dinner&lt;br /&gt;
    29          -- including gyro/kebap/kofte/souvlaki&lt;br /&gt;
    30          -- German beers and Biergarten Speisen (Wurst, Schnitzel,usw)&lt;br /&gt;
    31             https://dasbierhauz.com/burger-%26-sausage&lt;br /&gt;
    32        * order and pay at the counter, take a number,&lt;br /&gt;
    33              and they bring it out to you.  So no waiting on the check.&lt;br /&gt;
    34        * right next to light rail and loud caltrains and VTA transit center&lt;br /&gt;
    35&lt;br /&gt;
    36    How Often?&lt;br /&gt;
    37        Our current schedule is&lt;br /&gt;
    38          -- First Mondays&lt;br /&gt;
    39                  and&lt;br /&gt;
    40          -- Third Fridays&lt;br /&gt;
    41                  always at 12:34pm.&lt;br /&gt;
    42&lt;br /&gt;
    43    Keep me informed?&lt;br /&gt;
    44        Subscribe at https://groups.io/g/qsv&lt;br /&gt;
    45        if you want to receive updates.&lt;br /&gt;
    46&lt;br /&gt;
    47    Questions?  Ask W6REK or K6EAU.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ham_string ==&lt;br /&gt;
&lt;br /&gt;
point to point wireless backbone for regional mesh&lt;br /&gt;
&lt;br /&gt;
Done right would be AI6KG &amp;amp; W6MRR concurring an excellent solution.&lt;br /&gt;
&lt;br /&gt;
VHF/UHF/900-915MHz/2.4GHz/5.8GHz/10GHz/60GHz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://9amtalk.net/&lt;br /&gt;
&lt;br /&gt;
https://labitat.dk/wiki/WSPR&lt;br /&gt;
&lt;br /&gt;
https://www.noisebridge.net/wiki/HAM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TBD ==&lt;br /&gt;
*Balloons&lt;br /&gt;
*Licensing&lt;br /&gt;
*Events&lt;br /&gt;
*SDR&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=140</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=140"/>
		<updated>2024-01-09T17:29:12Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Log */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* 8am arrival&lt;br /&gt;
* 1.5 hours on compiling/install svxlink for EchoLink on rPi4 &amp;amp; ThinkPar Arch&lt;br /&gt;
** Raspberry Pi issue with pulseaudio initialization&lt;br /&gt;
** Arch config in process...&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=139</id>
		<title>QSV</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=QSV&amp;diff=139"/>
		<updated>2024-01-09T16:55:21Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Amateur Radio in and around Mt. &amp;lt;code&amp;gt;foo&amp;lt;/code&amp;gt; &amp;lt;strike&amp;gt;View&amp;lt;/strike&amp;gt; along with related topics.&lt;br /&gt;
&lt;br /&gt;
== EchoLink ==&lt;br /&gt;
&lt;br /&gt;
http://echolink.org/&lt;br /&gt;
&lt;br /&gt;
https://github.com/sm0svx/svxlink&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lawn Tennis&lt;br /&gt;
&lt;br /&gt;
[[File:Lawn-Tennis-Vertical-Sync.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== QSV ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Continuing on in &amp;lt;i&amp;gt;2024&amp;lt;/i&amp;gt;, 1st Monday and 3rd Friday of the month. QTH Olympus Cafe, 12:34&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historical Announcement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1    Announcing QSV Lunch this Friday March 18 at 12:34pm.&lt;br /&gt;
     2&lt;br /&gt;
     3    QSV?&lt;br /&gt;
     4        QSV are Hams who Hack -- The intersection of Amateur Radio and&lt;br /&gt;
     5        Hacker/Maker/STEM culture, in Mountain View, California.&lt;br /&gt;
     6&lt;br /&gt;
     7    Don&#039;t all hams hack?&lt;br /&gt;
     8        Yes, probably so!&lt;br /&gt;
     9        But this defines our culture and focuses our topics.&lt;br /&gt;
    10&lt;br /&gt;
    11    Where?&lt;br /&gt;
    12        at the outdoor picnic tables of&lt;br /&gt;
    13        Olympus Caffe &amp;amp; Bakery, Mountain View.&lt;br /&gt;
    14          -- https://cafeolympus.com/&lt;br /&gt;
    15          -- https://www.openstreetmap.org/node/1306273777&lt;br /&gt;
    16        We sit towards the corner of the block (Castro at Evelyn).&lt;br /&gt;
    17&lt;br /&gt;
    18    Why There?&lt;br /&gt;
    19        * outdoor tables&lt;br /&gt;
    20        * you can come and go at will, be early, be late&lt;br /&gt;
    21        * easy to move around and chat with different people&lt;br /&gt;
    22        * order as much or as little as you like:&lt;br /&gt;
    23          -- free water&lt;br /&gt;
    24          -- coffee and tea&lt;br /&gt;
    25          -- turkish pastries and european/american desserts&lt;br /&gt;
    26          -- wide variety of breakfasts, lunches, and dinners&lt;br /&gt;
    27             https://cafeolympus.com/breakfast&lt;br /&gt;
    28             https://cafeolympus.com/lunch-%26-dinner&lt;br /&gt;
    29          -- including gyro/kebap/kofte/souvlaki&lt;br /&gt;
    30          -- German beers and Biergarten Speisen (Wurst, Schnitzel,usw)&lt;br /&gt;
    31             https://dasbierhauz.com/burger-%26-sausage&lt;br /&gt;
    32        * order and pay at the counter, take a number,&lt;br /&gt;
    33              and they bring it out to you.  So no waiting on the check.&lt;br /&gt;
    34        * right next to light rail and loud caltrains and VTA transit center&lt;br /&gt;
    35&lt;br /&gt;
    36    How Often?&lt;br /&gt;
    37        Our current schedule is&lt;br /&gt;
    38          -- First Mondays&lt;br /&gt;
    39                  and&lt;br /&gt;
    40          -- Third Fridays&lt;br /&gt;
    41                  always at 12:34pm.&lt;br /&gt;
    42&lt;br /&gt;
    43    Keep me informed?&lt;br /&gt;
    44        Subscribe at https://groups.io/g/qsv&lt;br /&gt;
    45        if you want to receive updates.&lt;br /&gt;
    46&lt;br /&gt;
    47    Questions?  Ask W6REK or K6EAU.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ham_string ==&lt;br /&gt;
&lt;br /&gt;
point to point wireless backbone for regional mesh&lt;br /&gt;
&lt;br /&gt;
Done right would be AI6KG &amp;amp; W6MRR concurring an excellent solution.&lt;br /&gt;
&lt;br /&gt;
VHF/UHF/900-915MHz/2.4GHz/5.8GHz/10GHz/60GHz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
http://9amtalk.net/&lt;br /&gt;
&lt;br /&gt;
https://labitat.dk/wiki/WSPR&lt;br /&gt;
&lt;br /&gt;
https://www.noisebridge.net/wiki/HAM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TBD ==&lt;br /&gt;
*Balloons&lt;br /&gt;
*Licensing&lt;br /&gt;
*Events&lt;br /&gt;
*SDR&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=138</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=138"/>
		<updated>2024-01-04T21:35:29Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: logging&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
=== Thursday January 4th, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;replicator&amp;lt;/code&amp;gt;&lt;br /&gt;
** backing up thumb data &amp;amp; gqrx to &amp;lt;code&amp;gt;/data&amp;lt;/code&amp;gt;&lt;br /&gt;
** updating arch packages&lt;br /&gt;
* dumped Pixel Blaze v2 firmware bin for backup&lt;br /&gt;
* Added headers to S3 dev board and flashed to MicroPython v1.22&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuesday January 2nd, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* Getting to &amp;quot;HOW&amp;quot; and blinky with Osram PDSP 1881 &amp;amp; S3&lt;br /&gt;
* Re-attaching APA102 strip with Pixel Blaze to whiteboard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monday January 1st, 2024 ===&lt;br /&gt;
&lt;br /&gt;
* QSV Lunch 12:34&lt;br /&gt;
* V3561182 Radiosonde recovery&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturday December 30th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Initial Pixel Blaze v2 APA102 bring up&lt;br /&gt;
* Basic blinky hack&#039;n with Drone Racing in Main Room&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Friday December 29th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Pixieboard DUO debugging&lt;br /&gt;
** 6 boards evaluated, red &amp;amp; green&lt;br /&gt;
* Balloon Tracker tested&lt;br /&gt;
* 2nd bench nice and clean/clear as well&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sunday December 26th, 2023 ===&lt;br /&gt;
&lt;br /&gt;
* Relay sorting, couple dozen 24v &amp;amp; assorted AMFs&lt;br /&gt;
* 3D printer bench clean up&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=137</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=137"/>
		<updated>2024-01-04T01:07:18Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[LED_Dot_Matrix_Display]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=136</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=136"/>
		<updated>2024-01-04T01:06:21Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;37C3&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[LED_Dot_Matrix_Display]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=135</id>
		<title>LED Dot Matrix Display</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=135"/>
		<updated>2024-01-02T21:49:51Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Pin Out */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Osram PDSP 1881 ==&lt;br /&gt;
&lt;br /&gt;
8 digit 5x7 dot matrix capable of standard alphanumeric upper and lower case display. This version &amp;quot;1881&amp;quot; is yellow, also available in red and green.&lt;br /&gt;
&lt;br /&gt;
Also PDSP 188x, i.e., 1880, 1881, 1882, 1883, 1884&lt;br /&gt;
&lt;br /&gt;
[https://mm.digikey.com/Volume0/opasdata/d220001/medias/docus/2162/PDSP1880-84_2006-03-30.pdf Datasheet PDSP 1880-1884]&lt;br /&gt;
&lt;br /&gt;
=== Pin Out ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1  Reset           30 D7&lt;br /&gt;
2  Flash           29 D6&lt;br /&gt;
3  A0              28 D5&lt;br /&gt;
4  A1              27 D4&lt;br /&gt;
5  A2              26 D3&lt;br /&gt;
6  A3              25 D2&lt;br /&gt;
7  No Pin          24 No Pin&lt;br /&gt;
8  No Pin          23 No Pin&lt;br /&gt;
9  No Pin          22 No Pin&lt;br /&gt;
10 A4              21 D1&lt;br /&gt;
11 Clock Select    20 D0&lt;br /&gt;
12 Clock in/out    19 Read&lt;br /&gt;
13 Write           18 Ground&lt;br /&gt;
14 Chip Enable     17 Not Connected&lt;br /&gt;
15 Vcc (5 volt)    16 Ground&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://hackaday.io/project/179959-retro-alphanumeric-led-displays-libraries hackaday.io project]&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=134</id>
		<title>LED Dot Matrix Display</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=134"/>
		<updated>2024-01-02T21:46:08Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: /* Osram PDSP 1881 */ Pin Out&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Osram PDSP 1881 ==&lt;br /&gt;
&lt;br /&gt;
8 digit 5x7 dot matrix capable of standard alphanumeric upper and lower case display. This version &amp;quot;1881&amp;quot; is yellow, also available in red and green.&lt;br /&gt;
&lt;br /&gt;
Also PDSP 188x, i.e., 1880, 1881, 1882, 1883, 1884&lt;br /&gt;
&lt;br /&gt;
[https://mm.digikey.com/Volume0/opasdata/d220001/medias/docus/2162/PDSP1880-84_2006-03-30.pdf Datasheet PDSP 1880-1884]&lt;br /&gt;
&lt;br /&gt;
=== Pin Out ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1  Reset&lt;br /&gt;
2  Flash&lt;br /&gt;
3  A0&lt;br /&gt;
4  A1&lt;br /&gt;
5  A2&lt;br /&gt;
6  A3&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10 A4&lt;br /&gt;
11 Clock Select&lt;br /&gt;
12 Clock in/out&lt;br /&gt;
13 Write&lt;br /&gt;
14 Chip Enable&lt;br /&gt;
15 Vcc (5 volt)&lt;br /&gt;
16 Ground&lt;br /&gt;
17&lt;br /&gt;
18 Ground&lt;br /&gt;
19 Read&lt;br /&gt;
20 D0&lt;br /&gt;
21 D1&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
25 D2&lt;br /&gt;
26 D3&lt;br /&gt;
27 D4&lt;br /&gt;
28 D5&lt;br /&gt;
29 D6&lt;br /&gt;
30 D7&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://hackaday.io/project/179959-retro-alphanumeric-led-displays-libraries hackaday.io project]&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=133</id>
		<title>LED Dot Matrix Display</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=133"/>
		<updated>2024-01-02T21:41:40Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Osram PDSP 1881 ==&lt;br /&gt;
&lt;br /&gt;
8 digit 5x7 dot matrix capable of standard alphanumeric upper and lower case display. This version &amp;quot;1881&amp;quot; is yellow, also available in red and green.&lt;br /&gt;
&lt;br /&gt;
Also PDSP 188x, i.e., 1880, 1881, 1882, 1883, 1884&lt;br /&gt;
&lt;br /&gt;
[https://mm.digikey.com/Volume0/opasdata/d220001/medias/docus/2162/PDSP1880-84_2006-03-30.pdf Datasheet PDSP 1880-1884]&lt;br /&gt;
&lt;br /&gt;
[https://hackaday.io/project/179959-retro-alphanumeric-led-displays-libraries hackaday.io project]&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=132</id>
		<title>LED Dot Matrix Display</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=LED_Dot_Matrix_Display&amp;diff=132"/>
		<updated>2024-01-02T21:38:18Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: Created page with &amp;quot;== Osram PDSP 1881 ==  8 digit 5x7 dot matrix capable of standard alphanumeric upper and lower case display. This version &amp;quot;1881&amp;quot; is yellow, also available in red and green.  Also PDSP 188x, i.e., 1880, 1881, 1882, 1883, 1884  [https://mm.digikey.com/Volume0/opasdata/d220001/medias/docus/2162/PDSP1880-84_2006-03-30.pdf Datasheet PDSP 1880-1884]  [https://hackaday.io/project/179959-retro-alphanumeric-led-displays-libraries/log/193210-pdsp-1881-16x4-display/ hackaday.io pro...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Osram PDSP 1881 ==&lt;br /&gt;
&lt;br /&gt;
8 digit 5x7 dot matrix capable of standard alphanumeric upper and lower case display. This version &amp;quot;1881&amp;quot; is yellow, also available in red and green.&lt;br /&gt;
&lt;br /&gt;
Also PDSP 188x, i.e., 1880, 1881, 1882, 1883, 1884&lt;br /&gt;
&lt;br /&gt;
[https://mm.digikey.com/Volume0/opasdata/d220001/medias/docus/2162/PDSP1880-84_2006-03-30.pdf Datasheet PDSP 1880-1884]&lt;br /&gt;
&lt;br /&gt;
[https://hackaday.io/project/179959-retro-alphanumeric-led-displays-libraries/log/193210-pdsp-1881-16x4-display/ hackaday.io project]&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:37C3-board-blaze.jpg&amp;diff=120</id>
		<title>File:37C3-board-blaze.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:37C3-board-blaze.jpg&amp;diff=120"/>
		<updated>2023-12-31T07:48:55Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=119</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=119"/>
		<updated>2023-12-31T07:47:26Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
#h1 37C3&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=118</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=118"/>
		<updated>2023-12-31T07:46:19Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: 37C3 blinky recap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
#h1 37C3&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-bench.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[File:APA102.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-prep.jpg|480px]]&lt;br /&gt;
&lt;br /&gt;
[[File:37C3-board-blaze.jpg|480px]]&lt;br /&gt;
&lt;br /&gt;
[[File:NUBcore-kit.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:37C3-board-prep.jpg&amp;diff=117</id>
		<title>File:37C3-board-prep.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:37C3-board-prep.jpg&amp;diff=117"/>
		<updated>2023-12-31T07:39:37Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:NUBcore-kit.jpg&amp;diff=116</id>
		<title>File:NUBcore-kit.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:NUBcore-kit.jpg&amp;diff=116"/>
		<updated>2023-12-31T07:38:42Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:37C3-bench.jpg&amp;diff=115</id>
		<title>File:37C3-bench.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:37C3-bench.jpg&amp;diff=115"/>
		<updated>2023-12-31T07:36:22Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=File:APA102.jpg&amp;diff=114</id>
		<title>File:APA102.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=File:APA102.jpg&amp;diff=114"/>
		<updated>2023-12-31T07:35:24Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
	<entry>
		<id>https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=113</id>
		<title>User:Beau-K6eau</title>
		<link rel="alternate" type="text/html" href="https://wiki.hackerdojo.com/index.php?title=User:Beau-K6eau&amp;diff=113"/>
		<updated>2023-12-30T05:29:01Z</updated>

		<summary type="html">&lt;p&gt;Beau-K6eau: RGB and then some&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello world&lt;br /&gt;
&lt;br /&gt;
Hacker Dojo 37C3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Getting to Blinky&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;MicroPython &amp;amp; ESP8266&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;code&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from machine import Pin, ADC&lt;br /&gt;
from time import sleep_ms&lt;br /&gt;
&lt;br /&gt;
print(&#039;Hacker Dojo ESP8266 booting...&#039;)&lt;br /&gt;
&lt;br /&gt;
# MicroPython Getting Startred Reference&lt;br /&gt;
# http://docs.micropython.org/en/latest/esp8266/quickref.html#pins-and-gpio&lt;br /&gt;
&lt;br /&gt;
# AI Thinker EASP8266 Module Pin Out&lt;br /&gt;
# https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-ESP-12E-chip-pinout-gpio-pin.png&lt;br /&gt;
&lt;br /&gt;
# LinkNode D1 Arduino Uno form factor&lt;br /&gt;
# https://learn.linksprite.com/linkspriteio/linknode/linknode-d1/&lt;br /&gt;
&lt;br /&gt;
# TODO: Feature&lt;br /&gt;
# https://wiki.seeedstudio.com/Grove-LED_String_Light/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p0 = Pin(0, Pin.IN, Pin.PULL_UP) # Button&lt;br /&gt;
&lt;br /&gt;
# https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview&lt;br /&gt;
p2 = Pin(2, Pin.IN)              # PiR&lt;br /&gt;
&lt;br /&gt;
p12 = Pin(12, Pin.OUT, value=1)  # GREEN&lt;br /&gt;
p13 = Pin(13, Pin.OUT, value=1)  # RED&lt;br /&gt;
p14 = Pin(14, Pin.OUT, value=1)  # BLUE&lt;br /&gt;
&lt;br /&gt;
a0 = ADC(0)  # Light Sensor https://arduinogetstarted.com/tutorials/arduino-light-sensor&lt;br /&gt;
&lt;br /&gt;
def button_handler(pin):&lt;br /&gt;
  print(&amp;quot;button&amp;quot;)&lt;br /&gt;
  blink()&lt;br /&gt;
&lt;br /&gt;
def pir_handler(pin):&lt;br /&gt;
  print(&amp;quot;PiR&amp;quot;)&lt;br /&gt;
  motion_trigger()&lt;br /&gt;
&lt;br /&gt;
# https://randomnerdtutorials.com/micropython-interrupts-esp32-esp8266/&lt;br /&gt;
p0.irq(trigger=Pin.IRQ_FALLING, handler=button_handler)&lt;br /&gt;
p2.irq(trigger=Pin.IRQ_RISING, handler=pir_handler)&lt;br /&gt;
&lt;br /&gt;
def motion_trigger():&lt;br /&gt;
  for i in range(0, 10):&lt;br /&gt;
    p13.value(not p13.value())&lt;br /&gt;
    sleep_ms(100)&lt;br /&gt;
&lt;br /&gt;
def blink():&lt;br /&gt;
  p12.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p12.value(1)&lt;br /&gt;
  p13.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p13.value(1)&lt;br /&gt;
  p14.value(0)&lt;br /&gt;
  sleep_ms(200)&lt;br /&gt;
  p14.value(1)&lt;br /&gt;
&lt;br /&gt;
blink()&lt;br /&gt;
&lt;br /&gt;
def do_connect():&lt;br /&gt;
  import network&lt;br /&gt;
  wlan = network.WLAN(network.STA_IF)&lt;br /&gt;
  wlan.active(True)&lt;br /&gt;
  if not wlan.isconnected():&lt;br /&gt;
    print(&#039;connecting to network...&#039;)&lt;br /&gt;
    wlan.connect(&#039;Hacker Dojo Free&#039;, &#039;hackerdojo&#039;)&lt;br /&gt;
    while not wlan.isconnected():&lt;br /&gt;
      pass&lt;br /&gt;
  print(&#039;network config:&#039;, wlan.ifconfig())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# do_connect()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Made with a breadboard and random bits found in the electronics lab. 37C3 hack&#039;n with Brick Breakers.&lt;/div&gt;</summary>
		<author><name>Beau-K6eau</name></author>
	</entry>
</feed>