• How To Fix Your Broken Onion Omega2 Board For Only $3.20

    02/03/2017 at 16:26 8 comments

    Yes, it is broken. Step One is to accept this fact:

    Above: a $5 Linux computer that uses 2mm header pins, meaning it requires a $10 - $15 dock to use.

    Step Two is to bitch about the problem on Hack Chat (you have to scroll back a few weeks to see the post). Half an hour later, be gracious when @davedarko throws together a quick PCB design and sends you the @oshpark purchase link. Get stoked and order the boards immediately (including one free!):


    Step Three: wait two weeks, find an envelope in the mail, snap apart a header, solder 64 thru-hole joints, and be excited that you saved money:


    Yes, it fits -- the board straddles half a breadboard and gives you plenty of space to pick up all 32 pins. @Onion.io: please consider changing to 0.1"/2.54mm headers like the rest of the world for your next spin, it wouldn't change the board dimensions by much and would make your product substantially more user-friendly!

    Thanks again, Dave!

  • PiZero curiosities

    01/05/2017 at 16:02 13 comments

    I picked up a Pi Zero the other day and haven't done much with it. I should have gotten the kit, since I don't have an extra uSD card lying around and I sure as heck don't have any mini-HDMI cables. Ah well.

    [photo from Adafruit]

    It's a pretty nifty board, as ten billion people (give or take) have already said at this point. As I sometimes do with circuit boards when I need to procrastinate, I grabbed my loupe and gave it a close examination. A few interesting items popped out which I've attempted to image below using an exceedingly crappy 'macro' setup (F1.8/D40, 10x loupe, remote shutter release, steady hands).

    The picture above shows a close-up of the space between the SD card slot (top) and the mini-HDMI port (not quite visible on the bottom). I was curious about the little flip-chip marked U8--it's a tiny 8 or 9 ball raw silicon chunk tied in with a few of the HDMI lines. The official RPi Zero schematic is only partial (it's missing the SD card and HDMI bits), but based on the RPi A/B schematic I believe this is a BAV99 high-speed switching diode array, as it seems to be connected to the same lines (HDMI_CEC_DAT, _SCL, and _SDA). However, I couldn't find a datasheet with a matching package, so that may be incorrect.

    The picture above shows a close-up of the mysterious(ish) Broadcom BCM2835 SOC that runs the whole board. What was most interesting to me here is the double-stack BGA arrangement; from what I can tell, the BCM2835 rides on an FR4 plate that pretty much changes the ball pitch from ~0.4mm (guess) to ~0.65mm (another guess), presumably adding an extra row or two to make up for the decreased density or perhaps dropping a bunch of connections entirely. My theory -- the high ball density of the SOC requires a higher layer count PCB for proper escape routing, so the in-between plate allows them to use the chip with a cheaper 4 layer PCB. Anyone ever seen this before that could confirm this suspicion?

  • mucking about with the ESP32

    12/29/2016 at 20:07 1 comment

    I hopped on seeed studio a few months ago and ordered a quintet of ESP32S boards. They were cheap, but didn't arrive for another 6 weeks or so:

    I had a bit of time between Christmas and New Years, so I finally got around to wiring a module up and running a few test programs:

    Having zero experience with the platform's predecessor, getting all the bits and pieces sorted involved a steep learning curve. Fortunately, the ESP32 documentation is quite good; the list of resources at http://esp32.net/ is a great starting point, and the official forums at http://esp32.com/ are also excellent. Development and documentation of various functions seems to continue up to the minute, so it's an exciting time to have the boards in hand.

    A few notes on the dev environment I've found to work well:

    • I run Linux Mint 17.2, so I started by following the Linux toolchain setup instructions in the ESP-IDF Github repo. Everything went pretty smoothly here.
    • Getting the board to flash was initially difficult; the first part of the sequence seemed to work but I kept getting header errors prior to the main program upload. Based on various bits of Internet advice, I tried:
      • using a benchtop 3.3VDC power supply (thinking the chip was browning out);
      • adding a mondo electrolytic cap to the power rails (same reason);
      • changing USB serial adapters (both FT232RL-based);
      • reversing the Tx/Rx wires a few thousand times;
      • mucking about with the reset and IO0 buttons (pulling IO0 low and doing a reset puts the device in program mode);
    • Eventually I swapped modules (hence the hastily air-soldered image above). I think I must have bricked the first one by doing something dumb with the power rails, but oddly enough it still spat out serial data. Weird.
    • It's pretty easy to make sure the module is working -- just fire up a serial window (I use gtkterm) with the right USB connection at 115,200 baud, reset the board, and you should see _something_ come back. If IO0 is pulled low during the reset, the terminal will tell you the module is waiting for a program.

    Since getting the dev environment sorted (ish), I've gotten a few example programs to run (both of which appear to draw ~120 mA or so):

    • Full Wifi scan: periodically scans for all nearby Wifi access points and spits SSIDs, signal strengths, and security method into a terminal window.
    • Mongoose webserver: uses Mongoose to serve up a hardcoded test HTML page along with a time-since-reset counter. I modified the code slightly so the ESP32 would act as an open access point and redirect all requests to the same default page, both of which were pretty easy to do.

    Neil Kolban's ongoing effort to create an easy-to-use ESP32 guide is awesome, so I highly recommend downloading his free ebook. The current revision still has a few things in progress (Mongoose WebSocket, etc) but it's quite comprehensive as is.

    More to come at some point. I'd like to putz around with some of the more traditional microcontroller peripherals at some point (SPI, I2C, etc), and getting a continuous WebSocket channel open is high on the list too. Many more learnings to happen, and I still dislike programming.