Tag Archives: open-source electronics

Black Swift board – connecting to WiFi network using UART

Hi! Today I’m showing you how to connect to a wireless network using serial console (or SSH over wired LAN, for that matter) in OpenWRT.

Disclaimer: this tutorial is mainly focused on Black Swift boards, which are nice boards running OpenWRT, but I believe it should apply to most of the OpenWRT boards.

Connecting to WiFi using serial connection might be necessary because you’ve got WiFi connection as the only other way to configure your board but you need to connect to the Internet somehow, for example, to download updates. Not to mention it is kinda is hard to change settings on a connection you’re using to change them, one wrong move/glitch and you’re cut off, needing to reboot the board and restart =( Say, you’ve got a Black Swift Pro board with USB-UART embedded, or you have connected an external USB-UART to your BSB Basic, doesn’t matter. What matters is that you’ve got a terminal at your service, and that ain’t going anywhere – even if WiFi goes down. … I like serial consoles. They’re reliable.

By the way, I’m overriding the UCI configuration. It’s temporary, so not gonna get saved anywhere. For UCI configuration there are many other guides, which I need not repeat here – these are plain old command line tools. If this guide gets outdated at some point, do not hesitate to contact me using comments or e-mail.

Say, your network interface is wlan0 – one can never be too sure, what if you were using an USB-WiFi dongle? If in doubt and things go wrong, check.
Now you need to issue a couple of commands to connect to your WiFi network of choice. I suggest you follow this guide, it has info about using different network encryption types with iw utility. For me, I had to use wpa_supplicant because my network is WPA2 protected. For this, I needed a file with network’s PSK, and that file is usually generated by wpa_passphrase command-line utility. BSB’s firmware provides no wpa_passphrase tool in the default image, however, you can run it on any Linux machine and then just copy the output over.

If you don’t have a Linux PC with this tool nearby, there’s also this option:
1. Take this configuration:

    #psk="passphrase" #network password goes here, but this is not necessary

2. Generate the PSK part on this website
3. Fill in the fields according to the field names and save this in a file.

Then, you have to start wpa_supplicant like this:
wpa_supplicant -iwlan0 -cwpa.conf, where wpa.conf is the file you’ve just generated.

Hit Ctrl^Z when you can see it has connected to the right AP to free the terminal, then send wpa_supplicant to background with bg command.
You can use iw dev wlan0 link to verify you’ve connected to the wireless network, if you’ll be unsure about that.

Check if DNSMASQ is running – it’s most likely serving DHCP addresses on the wireless network you just connected to, you’d want to avoid that.
ps |grep dnsmasq
Once you know the PID, just kill it.

Okay, now getting the address by DHCP.
udhcpc -i wlan0

We should have basic connection. Check network connectivity now:

However, we don’t have DNS working, the reason is that DNSMASQ is used as a caching DNS server and therefore it made itself a system-wide DNS server, and we just had to shut it down. We need to edit /etc/resolv.conf and replace “” in there with any DNS server, be it your router, your provider’s DNS or one of public DNS addresses. I chose When done, test it:
nslookup google.com
If the results are reasonable, you’re good to go. Now, set up whatever you need to set up. For me, I finally could do opkg update – I’ll tell you about that one later =)


Bonus: connecting USB-UART to the Black Swift board

(Basic, as the Pro boards have USB-UART on the board)

  1. A USB-UART dongle with suitable logic levels – 3.3V max. If in doubt, plug it in and check RXD and TXD lines’ levels from the ground. None should be above approx. 3.3V.
  2. A couple of sufficiently thin wires (I used male-male breadboarding wires, as you can see on the pictures below). If you don’t have headers attached to your BSB, you can solder those wires right into the connection holes on the BSB.



You can safely swap the RXD/TXD lines, and you might need to because different manufacturers label them differently. If you plug in the board but see nothing in the terminal, most likely that’s what you need to do.

UART parameters: 115200, 8n1


Tip – if you don’t have 5V line on your connector, you most definitely won’t burn your GPIO by connecting wires to it accidentally 😉


I was surprised that my BSB breakout had GPIO columns swapped. I soldered UART wires incorrectly the first time before my gut feeling warned me I should check the pinouts before plugging it all in.


The wires – beware, they are plugged in wrong holes on this picture!


End result, up and running great.

Oh, and if you will have problems running a counterfeit USB-UART adapter based on PL2032, like the one I used, I highly recommend visiting this site for drivers. Worked like a charm on Windows 8 x64.


Payphone project – screen problem solved & parts arriving

I’ve got some updates for the payphone project. First of all, a photo of the actual payphone I’m modifying. It’s a GPT Sapphire payphone, and there were a lot of payphones like this in Latvia just some years before. Now there are no payphones like this on the streets =(

Now, something about the HD44780 screen. First, this screen compared with the cheapest chinese HD44780-compatible screen:

As you can see, they differ not only in sizes, but also that the header is not at the right place. What a shame =(

As I’ve told you, I’ve ordered replacement comtroller ICs for the display. They’ve arrived:
A closeup shot:
So – I’ve desoldered original ICs and soldered the new ones on the board.


Still didn’t work! Why? Amused, I connected the display to the payphone… Only to see it working.


What was it? I’ve had a guess, and I guessed it right.


Seems that my HD44780 screen needs negative contrast voltage in order to display something. Couldn’t have known that earlier – there isn’t much information on this on the Web, and I can see why – it’s an extended temperature range screen, they aren’t that popular. I’ll need to make a negative charge pump in order to power it… BTW, would be a nice idea to see just how much current it needs on the contrast line – to understand which charge pump is needed. If it’s under 0,5 A, I can use a well-known 7660 IC. If not, well, that’s sad – that’d mean I’d need somebody to help.

Some info about this phenomena:
First clue I’ve found that helped me understand;
Actual screen modification that provides some info on how and why;
Just a bunch of photos of different displays =)

Also, I’ve received DTMF generators (datasheet) and decoders (datasheet)… But I haven’t got the crystals for them yet – they’re to arrive soon =( I’ve made breakout boards for both, but, as you can see, they lack some passive components and crystals.

(Left – a ready board, center – DTMF decoder board w/o crystal and passive elements, right – DTMF generator board w/o crystal)
In order to understand my breakout circuit, just look at the datasheets, there’s a section with a sample usage. The breakout board with a crystal and IC is MT8870 DTMF decoder board – it’s basically the same IC, just older and from another manufacturer, but pinout and circuit are the same. I’ve made this board around 3-4 years before =) That might be one of the reasons it doesn’t work so well – my soldering wasn’t so good back then.
I also plan on making breakouts in Eagle CAD, just after I test these hand-made boards. I’ll share them here – along with some more useful breakouts I hope I’ll finally get an opportunity to test.

I’ve received a I2C-to-HD44780 interface converter, or, as they’re called, I2C LCD backpack.


It’s also a Chinese version – so it’s not amusing it doesn’t work with the popular I2C LCD backpack Arduino libraries. Why? Seems that pin mapping between I2C-GPIO IC that’s on the backpack board and LCD header on the same board just isn’t the same as in popular versions of this kind of backpack. We’re left to guess just why they’d manufacture a backpack like that, yet it isn’t the prettiest thing to do. At least they’ve supplied Arduino libraries and example code… Which doesn’t compile in my Arduino IDE, and I don’t even want to know why ’cause I sure don’t want to translate code comments from Chinese. I suppose modifying some library that is already working just to have the bits of data sent in different order won’t be any hard. Also, it has a backlight control pin connected to the I2C-GPIO chip, so that’s a bonus =)

I plan on doing the next update when I’ll receive crystals and complete my breakout boards. I’ll probably have Eagle-made breakout boards and libraries for DTMF chips to share by then, too =) Not to forget Arduino libraries.


Project: Payphone remake

One of my current projects in R&D stage is converting a GPT payphone to Arduino platform while preserving all the abilities and keeping its outside as-is. This is a project I’ve started to plan when I was asked to unlock this payphone. See, they have smart card system inside which somehow is responsible for security of the payphone and all that stuff… And the payphone effectively fails to work both with or without a small internal SIM-like smartcard, it’s locked with it and not working without it.
So what? We have a payphone that is useless, even though it’s a masterpiece inside – i’ll show you why.
Without any clue about how to unlock anything on existing hardware, I’ve got an idea… What if I could replace everything that relies on smartcard system (that, unfortunately, means about 75-85% of all electronics in the payphone) with self-developed solution that’d even be upgradeable in terms of its capabilities? That is, we take a MCU, we take all the other parts that we’d need to make a landline-connected phone, put them all together and write the firmware so that they all work together. Great, isn’t it?

When I had to choose a base, I chose Arduino. Why? Development will be easy for me because of great choice of libraries, my knowledge of Processing used in Arduino and huge count of people that are ready to help. Also, there surely are people who might repeat my project, and Arduino would be great for beginners. But… How the hell do you connect Arduino to a landline, let alone make it work as a payphone?

Turns out this isn’t easy, yes. AFAIK, Arduino cannot work with voice, so I’m kind of limited in what capabilities the payphone can have. However, we can leave alone voice synthesis and concentrate on how the heck do those two thin wires that come to our phone make sound…
It’s called DAA interfacing, and I’ve found around 10 articles or posts from people who had it implemented on different platforms. Turns out that you’d have legal problems connecting things to your landline… So – there’s a solution, called DAA interface module, it’s a bit like IC because it has all the needed components in one package, furthermore, it’s FCC approved. It takes those two wires and has contacts to connect the microphone, speaker and some more helpful contacts, such as signalling when there’s an incoming call and when the handset is lifted. Some even have Caller ID contact, although it’s not my case as currently I cannot find any DAA interface which has it and is in stock. Problem is – they’re old and they’re not manufactured anymore. Therefore, stock is not so great as I’d wish it was.
I’ll be ordering two different DAA module ICs:
1) CH1817 – datasheet is here, I’m getting them from here
2) CH1812 – datasheet is here, I’m getting them from here (same seller)

I’ll need to hook up a DTMF decoder to the module’s audio output and a DTMF generator to the module’s input. I’ll also need to mute microphone pre-amp for the time that DTMF generator will make sound. I’ll need something to control keypresses. There are keys on the payphone – and I need to preserve both them and PCB that has all the contacts for keys on it. I plan on cutting traces that lead to keys, disabling them from the rest of the PCB and wiring some kind of keypad controller IC to them. Maxim has one, it has I2C interface and does everything that’s needed – but it’s only QFN, no SOIC package available… There’s a need for a breakout, for sure =)

What about DTMF? Those old codes that phones and, recently, some robots and DIY smart house systems, are using to reliably encode and decode numbers over unreliable and limited phone lines? Well, Holtek seems to be partly targeted at that. They have both DTMF encoder and decoder ICs available, which are easy to control and cheap on eBay. Holtek even has a caller ID decoder IC available, even though I don’t yet know whether I’ll be able to implement that – it has some limitations =( All those ICs are easy to hook up to Arduino, there isn’t much code to be written and they’ll provide all the necessary functions.
By the way, the payphone has a nice HD44780 controlled screen. This screen has a connection header that is fully compatible with all those cheap 16×2 HD44780 screens, all the pins are of this header connected to right pins on HD44780 (I checked with an ohmmeter). In short, differences between this screen and any cheap 2-dollar HD44780 display on eBay are following:
1) Non-standard dimensions – this screen is 1,5 times bigger than all the screens available. Finding another one with the same dmensions would be quite a pain in the ass.
2) It doesn’t freaking work for me yet =(
I’ve ordered replacement controller ICs – there are two of them on a display board. BTW, those are quite hard to find – thank god I’ve found some offers on Alibaba. Well, they were expensive =(
I’ve added a diagram I made in Dia, it explains what’s connected to what =)


What I’ve ordered?

  • DTMF generator – HT9200
  • DTMF decoder – HT9170
  • Two solderless breadboards – for prototyping (already arrived)
  • Replacement controller ICs for the display – HD44780 and HD44100
  • Arduino Pro Mini MCU
  • DAA modules – I’ll be using only one but you can never be sure, things happen to break at the wrong time =)
  • RTC module – using DS1307 chip and the breakout I’ve developed by myself.

I haven’t yet ordered the keypad controller IC, unfortunately. If I won’t have it in time, I’ll make a keypad controller using a spare Arduino Pro Mini =) Here’s my eBay collection for this project – includes almost all the parts I’ve bought.

Some links, projects and articles about DAA interfacing:

  • This is probably the best article. It’s very close to my project and I guess I learned a lot from it. For everybody that will follow the same path as I did, this has to be read through.
  • This article provides a lot of nicely explained theorethical information about designing your own DAA interfaces. I won’t be following this path because DAA module is claimed to be safer, but it was nice to know more about what am I actually doing 😉
  • This is a price list from Cermetek, company that used to produce those DAA modules. Has nice datasheets of ICs that currently can’t be found anywhere 😉
  • This site sells spare parts for GTP Sapphire payphones. Just so you know =)
  • This is a project with handmade DAA interface – a landline-controlled alarm. If you can’t get a DAA module, take a look here – and don’t forget that theorethical article above so that your interface works instead of catching fire!
  • One more dial alarm with DIY DAA interface. This is described much better than the previous one =)
  • Sample project with DTMF generator hooked up to the phone line. Has some info about transformers and stuff.

More photos of this payphone:


That’s how it looks inside. Right part is security+DAA+MCU module, box on the left is a coin counting box, which hides a card reader/keypad/accu charger/display modules.


This module seems to be some kind of safety/power module, unfortunately, when I was doing research on it, I couldn’t connect it to the landline to check. When I’ll be assembling everything, I’ll retrace the schematics and fully understand what it does.


Card reader module. Probably even has some actuators to push the card out – I didn’t look, I just guess.


Some photos of main board (right side). Contains DAA and many, many general-purpose 15-year-old datasheetless MCUs that would be impossible to reverse-engineer. Also contains a DB9 port, must be COM – will see when I’ll work on it.


Security module. So much of a mess because of this PCB and some code in those MCUs that, apparently, says “Nothing will work without a proper authentication on my watch!”



Display, keyboard controller, accumulator controller and all that stuff. 



More about keypad



The display. Why doesn’t authentic HD44780 IC work using the same protocol as all the other displays on this IC use?


Some stickers from inside of the payphone. Google search for “Multipaymond” gives 0 results… Now there will be one =)

Wait for updates – there sure will be some when I’ll get all the parts!





DS1307 real-time clock PCB (SOIC)

I’m back to writing posts! And expect a long post about my Raspberry Pi wearable PC soon =)

Here I present you a tiny I2C RTC powered by DS1307.


  • 5V power
  • Possibility to connect 3V battery to save clock value while power is off
  • Small enough – 3,5×2,5cm
  • All parts are easy to find

IMG_0464 IMG_0466

Here’s the PCB image I made using EagleCAD. It uses:

  • CR2032 holder – can be easily salvaged from an old dead motherboard
  • 32,768KHz quartz resonator – same, usually found on old motherboards
  • 3x 10K SMD resistors – could either be bought or salvaged like two previous parts
  • DS1307Z in SO-8 packaging


This PCB indeed is tiny. The biggest part of it seems to be the battery holder, and I chose this type of holder/battery combination because both of them are easy to find. Also, you can hook up your own battery – there’s a pin for this on the pin header, thus, big holder is not necessary if you’re not using it =) I made this PCB just because I couldn’t find anything like this on the Net. Now it’s your, too, so you just need to print image below on a sheet of A4 paper using 600 dpi and you’ll have it 1:1. Hint: use GIMP for printing images with certain DPI. Should there be questions, I’ll post a guide for doing this =)

Hope this helps you in your numerous electronics projects.

 Just FYI again – it’s 5V. Yes, it will burn the Raspberry Pi unless you use a logic level voltage converter suitable for I2C communications. Later I’ll probably tell you about making one 😉

I’d really like to provide Eagle files, but the truth is – I lost them somewhere. I might have a backup somewhere, though =( As soon as I find it, I’ll put all the files here.