Browsed by
Category: Electronics Projects

My Electronics Projects Module Tips and Tricks Module Tips and Tricks

Some basic instructions/ramblings to get started (as the documentation for the Domino module isn’t currently complete)

To connect your Domino to a WiFi network using a GUI:

Plug in your Domino Pi/Qi/base module and use your phone or laptop to connect to the “Domino-***” Wifi. The default password is “goodlife”. Navigate to to access the web interface. Change your device’s hostname and password on the web interface and click “Okay, Reset”. Reconnect using your new password, navigate again to and log in using your new password, and you will have access to the web interface.

The basic interface (“Domino Web Panel”) is mobile-friendly; the “LUCI” tab, however, is still formatted for larger screens.

To connect to your local wireless network, choose “LUCI”, then “Network”, “WiFi”. Click “Scan” beside “Generic Wireless” and click “Join Network” next to your WiFi. Enter your password and hit “Submit”. Scroll to the bottom of the page and select “Save and Apply”. You can now access http://domino.local/ from your network.

To connect your Domino to a WiFi network using the command line:

Connect your domino by USB and open a terminal to it (/dev/ttyUSB0 on Linux or whichever COM port Windows assigns) at 115,200 bps. You will have root access just like any OpenWRT implementations. You will want to change the wifi-iface block in /etc/config/wireless to look something like the following (modify to suit your needs):

config wifi-iface
option network ‘wwan’
option ssid ‘yourwifinamehere’
option encryption ‘psk2’
option device ‘radio0’
option mode ‘sta’
option bssid ‘ma:ca:dd:re:ss:he:re’
option key ‘yourpasswordhere’

Mount points / Storage:

With the 3x USB + MicroSD expansion:
/mnt/sda1 is your microSD card
/mnt/sdb1 is your USB,
/mnt/sdc1 is your internal Flash storage

Getting a terminal on the Domino Qi (Arduino Yun Clone):

  1. Upload the YunSerialTerminal sketch over USB
  2. Connect to the Qi at 115200 8N1 and send ~2 to set it to 115200 (Otherwise you’ll just get garbage)

More goes here as I play around with it…

Driving a WS2811 RGB LED Strip with an Arduino

Driving a WS2811 RGB LED Strip with an Arduino

I recently purchased a WS2811 RGB LED strip for PC case modding purposes. I will be making an ATMega-based controller for it, so I decided to use an Arduino for testing and prototyping.

I found two libraries capable of driving this strip:

Plus many great links regarding the WS2811 at the Noisebridge Wiki.

I recommend trying out funkboxing’s FastSPI2 effects as great examples of using the FastSPI2 library. You will need to use the line LEDS.addLeds<WS2812, 13, GRB>(leds, NUM_LEDS); to properly initialize the code.

Writing a BeagleBone Cape’s EEPROM from UBoot

Writing a BeagleBone Cape’s EEPROM from UBoot

eeprom -d /dev/i2c-3 -a 0x54 -f foo

vi foo
<Escape> and :%!xxd
Edit the hex portion to your heart’s content
<Escape> and :%!xxd -r
Save and quit vi

To convert your eeprom.bin for upload via BusPirate

cat eeprom.bin | hexdump -v -e ‘8/1 “0x%02X “‘ -e ‘”\n”‘> eeprom.ascii

Upload using the method shown here.

Thanks to “linux instead” for the tip on using VI as a hex editor

Pager-Controlled Thermostat Teardown (Work in Progress)

Pager-Controlled Thermostat Teardown (Work in Progress)

After installing a new furnace and thermostat, I was left with an old thermostat that was controllable by the power company to allow them to shut off the A/C remotely during high-load time, and allows users access to set their thermostat online

The Cannon Technologies Inc “ExpressStat” board (Rev M) has:

  • a Renesas H8/3937 non-roaming FLEX decoder, with on-chip 60-kbyte ROM and 2-kbyte RAM,
  • a Ramtron FM24CL64 “F-RAM array” (similar to an EEPROM),
  • an Infrared TX/RX pair,
  • a Texas Instruments TIR1000
  • a pager sub-board, including pager motor and beeper/buzzer, antenna and receiver circuitry
  • an 8-pin header to the thermostat’s mainboard


EExtractor: An (EE)PROM-Extracting Arduino Shield (Beta)

EExtractor: An (EE)PROM-Extracting Arduino Shield (Beta)

Purpose: EExtractor is an Arduino-compatible Shield that allows a user to dump (or download) the contents of a ROM chip (ROM, PROM, EPROM, EEPROM, etc). 

Hardware Method: The EExtractor uses two SOIC MCP23S17 ICs to control the 31 (32 minus ground) pins of the ZIF Socket. This (ideally) allows the user to address any size or pinout of PROM IC up to, and including, 32 pins. Headers are broken out to allow for direct powering of PROM pins from the Arduino’s +5V port (if needed).

Software Method: The Arduino (or compatible) software will correctly configure pins (inputs/outputs, Hi-Z, pull-ups, etc) to allow for proper reading of the IC’s data. The software will then proceed sequentially through each byte of the PROM, outputting it along with a verification or checksum.

(The code is still under construction at this time.)

Availability: PCBs will be available once testing is complete.

EExtractor was made using the Open-Source gEDA suite of tools, including gschem, pcb, etc, and, as always, a little symbol and footprint help from

All materials, schematics (.sch), PCB Layout (.pcb), and related derivatives such as PCB renderings, schematic renderings, .ps, .pdf, .gbr and .cnc files, or other Gerber-format files and PCB boards produced with them, collectively known as v1.0 Beta 1, are released under the CC BY-SA 2.5 Canada license.

*EExtractor is not sponsored or otherwise supported by Arduino. The Arduino name used only to signify compatibility.

Fun with (Laser) Printers

Fun with (Laser) Printers

Conversing with your Laser Printer:(See disclaimer below)

To extract information from your printer in PJL telnet to its IP address, port 9100 (or by serial, see below), and send it these commands:

<Control+[>%[email protected] <Enter>

Then copy and paste the following commands:


Or even try some newer, more detailed but undocumented ones:


Save your responses, and then type (note: NO <Enter> afterwards):

Then you can disconnect and/or close your Telnet program

Alternately, here is a small BASH script to return all of the information in a dated text file. To use, simply give the script the IP address of the printer as an argument.

#v1.0 – M Lange, 4-Jan-2014
echo -e “Scan of $1 9100 run on `date`:\n——————————-\n” > PJLScan-`date -I`.$1.txt

{ echo -e “\033%[email protected]”;
echo @PJL INFO ID;
echo -e “\033%-12345X”;
sleep 5; } | telnet $1 9100 | sed -e ‘s/\r$//’ >> PJLScan-`date -I`.$1.txt

If you could post your results in the comments, or Pastebin them and post the link, I’d be happy to share them. (Feel free to remove serial numbers if you wish; simply replace them with ‘x’s or ‘-‘s.) I’m trying to get a feel for what the most common options and languages are, as an upcoming open-source project has me parsing raw data and sending it to network printers.

The usual disclaimers apply: I’m not responsible for damages caused to your stuff or expenses incurred (i.e ink/toner/paper). Luckily, the worst case scenario is either A) Print out a page with those commands on it, or B) Hog the printer’s I/O until it times out (or you turn it off and then back on). For this reason, I recommend only trying this on a printer to which you *own* and to which you have physical access.

PJL Commands:

Tip: To run a PJL command,
you need to be in PJL mode. If you’re not in PJL mode (ie you typed something that doesn’t begin with an @, you get bumped into raw text mode), you need to send a <Control+[>%[email protected] <Enter>, then you can type your PJL command, beginning with “@”. To end your PJL session, send <Control+[>%-12345X (with no <Enter> after it)

“@PJL” can be used as a command on its own, or rather, a lack of command (or NOOP). It is used after the Escape Code (…%-12345X) to tell the printer you will be typing some PJL. This is necessary because printers sample the code after the Escape Code (…%-12345X) to try to determine what type of data they are receiving (PJL, PCL, PCLXL, PostScript, etc., depending on the model)

HP LaserJet 4M Plus

  • Network printer, port 9100
  • Personalities: (Auto), PCL, PostScript [optional SIMM installed]

HP Color LaserJet CP1518ni:

  • Network printer, port 9100
  • Personalities: PCL, PCLXL, PostScript

HP Color Laserjet MFP M275nw:

  • Connected by ‘Wireless Direct Connect’ and used telnet to port 9100
  • Personalities: (Auto), URP, PCL, PDF, PostScript

HP LaserJet 1012:

  • Plugs in by USB only
  • Can interact with it at /dev/usblp0 at 115200,8,n,1 using gtkTerm as root: sudo gtkterm –port /dev/usblp0 –speed 115200 –echo and set “CR LF auto” under the configuration menu
  • Interesting: @PJL SET TESTPAGE=DATASTORE is an interesting (4-page) test page, essentially a printout of the value and meaning of all variables
  • Personalities: PCL, PCLXL

HP LaserJet 9050:

  • Network printer, port 9100
  • Interesting: 2MB Flash ROM and a RAMdisk for storage
  • Personalities: PCL, PCLXL, PDF, PostScript, MIME, XHTML

HP Color LaserJet 9500:

  • Network printer, port 9100
  • Personalities: (Auto), PCL, PDF, PostScript

HP Officejet Pro X476dw MFP:

  • Network printer, port 9100
  • Filesystem with Read/Write NAND
  • Personalities: PCL, PCLXL, PostScript, PDF

Brother HL-3040cn:

  • Network printer, port 9100
  • Personalities: XL2HB

Brother MFC-7440n:

  • Network printer, port 9100
  • Personalities: PCL

See also:

Please note:

  • I would imagine a number of inkjets use PJL, though honestly I have no inkjet printers on-hand to test on. I posit that a number of inkjets will work, including ones with built-in Ethernet. It may be possible to execute commands over USB as with the LaserJet 1012 (See above for serial terminal settings). If anyone has inkjet dumps, they’re just as welcome as Laser ones.
Kenwood KDC-MP528 Internals

Kenwood KDC-MP528 Internals

The Kenwood KDC-MP528 has the following goodies inside:

  • STMicro TDA7415 (TQFP64) – Car Radio Multimedia Signal Processor
  • STMicro TDA7540 (TQFP80) – AM/FM Car Radio Tuner IC with Stereo Decoder and Intelligent Selectivity System
  • Renesas M30624MWP-A43GP (TQFP100) – Single-Chip 16-Bit CMOS Microcomputer [Resources]
  • TI “HC02A 54K FYEE” (14-pin)
  • “4565 514 JRC” (8-pin)
  • “1930 4ZX4” (10-pin SOIC)
  • “L04 W209 5J” (8-pin)
Acer Aspire 3000 Battery Internals

Acer Aspire 3000 Battery Internals

This is a 4-cell battery; before opening it up, I was under the impression that it was a 3-cell.

The charge controller circuit board has “LIP8198” and “1-867-277-11” markings in the silkscreen, along with a strip of Kapton tape over the top of the PCB.

The PCB has +/- going to the 4 cells in series, as well as leads between each cell (probably for measuring voltage at each intermediate point), and two temp sensors: one on the battery closest to the circuit board (the one that the board’s “-” connects to) and one on the next one after that (the middle-most one).

The top side has the following ICs:

  • 3182 5J94 (Looks like a tiny EEPROM/Flash)
  • Two unlabelled 8-pin square ICs marked “04” and “07” on the silkscreen
  • 12AH4 SC SF

The bottom has the following:

  • TI bq80201DBT – “Battery ‘Gas Gauge'” for storing the cycle count?
  • TI bq29312PW – “Two, Three and Four Cell Lithium or Lithium-Polymer Battery Protection AFE”
  • A number of various bare-copper test points 🙂

With a bit of digging, it seems that the bq80201 is used for many different battery makes such as Sanyo, Dell, etc.

Relevant URLs:
Battery EEPROM Works (Software; not affiliated with this site, I have no guarantees of how well it works)
Battery EEPROM Works Forum topic re: B80201 support (Forum Thread)
Would still be nice to actually find a listing of the I2C codes that it uses.