Skip to the content
PCBKitNew board
2 layers67.6 × 128.2 mmMacPicoModem, the printed circuit board in 3D

This project is an adaptation of the mecparts's Pico WiFi Modem.

Size
67.6 × 128.2 mm
Copper layers
2
Thickness
1.6 mm
Parts
24
Nets
75
Pads
206
Tracks, vias
281, 78
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
23 Apr 2026
Updated
17 Oct 2026

Overview

MacPicoModem is an open-source printed circuit board by gutbomb, from the gutbomb/MacPicoModem repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 67.6 × 128.2 mm with 24 parts on 75 nets, routed with 281 tracks and 78 vias.

It is built around the 74HCT245, SP3238EEA-L/TR and 24LC32A-I/SN, with the NCD0805G1, DIN-802 and K2-1102AQ-J4CW-01 among its other parts. Its parts include 7 capacitors, 7 resistors, 4 ICs, 3 diodes and 2 connectors. It belongs with the RP2040 boards of this library.

Main components

6

README

README.md

Mac Pico Modem

A Pico W based RS422 <-> WiFi modem with Hayes AT style commands and Global Village Teleport style LED indicators

| The Mac Pico modem |

This project is an adaptation of the mecparts's Pico WiFi Modem.

My goal was to make it work with a mac serial port, look the part, and be cheaper to make.

First time setup

The default serial configuration is 9600bps, 8 data bits, no parity, 1 stop bit.

Here's the commands you need to set up the modem to automatically connect to your WiFi network:

  1. AT$SSID=your WiFi network name to set the WiFi network that the modem will connect to when it powers up.
  2. AT$PASS=your WiFi network password to set the password for the network.
  3. ATC1 to connect to the network.
  4. Optional stuff:
    • AT$SB=speed to set the default serial speed.
    • AT$SU=dps to set the data bits, parity and stop bits.
    • ATNETn to select whether or not to use Telnet protocol.
    • AT&Kn to use RTS/CTS flow control or not.
    • AT&Dn to set up DTR handling.
  5. AT&W to save the settings.

Once you've done that, the modem will automatically connect to your WiFi network on power up and will be ready to "dial up" a connection with ATDT.

Command Reference

Multiple AT commands can be typed in on a single line. Spaces between commands are allowed, but not within commands (i.e. AT S0=1 X1 Q0 is fine; ATS 0= 1 is not). Commands that take a string as an argument (e.g. AT$SSID=, AT$TTY=) assume that everything that follows is a part of the string, so no commands are allowed after them.

CommandDetails
+++Online escape code. Once your modem is connected to another device, the only command it recognises is an escape code of a one second pause followed by three typed plus signs and another one second pause, which puts the modem back into local command mode.
A/Repeats the last command entered. Do not type AT or press Enter.
ATThe attention prefix that precedes all command except A/ and +++.
AT?Displays a help cheatsheet.
ATAForce the modem to answer an incoming connection when the conditions for auto answer have not been satisfied.
ATC?
ATCn
Query or change the current WiFi connection status. A result of 0 means that the modem is not connected to WiFi, 1 means the modem is connected. The command ATC0 disconnects the modem from a WiFi connection. ATC1 connects the modem to the WiFi.
ATDSnCalls the host specified in speed dial slot n (0-9).
ATDT[+=-]host[:port]Tries to establish a WiFi TCP connection to the specified host name or IP address. If no port number is given, 23 (Telnet) is assumed. You can also use ATDT to dial one of the speed dial slots in one of two ways:

  • The alias in each speed dial slot is checked to see if it matches the specified hostname.
  • A host specified as 7 identical digits dials the slot indicated by the digit. (i.e. 2222222 would speed dial the host in slot 2).
Preceding the host name or IP address with a +, = or - character overrides the ATNET setting for the period of the connection.

  • + forces NET2 (fake Telnet)
  • = forces NET1 (real Telnet)
  • - forces NET0 (no Telnet)
Once the dial attempt has begun, pressing any key before the connection is established will abort the attempt.
ATE?
ATEn
Command mode echo. Enables or disables the display of your typed commands.

  • E0 Command mode echo OFF. Your typing will not appear on the screen.
  • E1 Command mode echo ON. Your typing will appear on the screen.
ATGEThttp://host[/page]Displays the contents of a website page. https connections are not supported. Once the contents have been displayed, the connection will automatically terminate.
ATHHangs up (ends) the current connection.
ATIDisplays the current network status, including sketch build date, WiFi and call connection state, SSID name, IP address, and bytes transferred.
ATNET?
ATNETn
Query or change whether telnet protocol is enabled. A result of 0 means that telnet protocol is disabled; 1 is Real telnet protocol and 2 is Fake telnet protocol. If you are connecting to a telnet server, it may expect the modem to respond to various telnet commands, such as terminal name (set with AT$TTY), terminal window size (set with AT$TTS) or terminal speed. Telnet protocol should be enabled for these sites, or you will at best see occasional garbage characters on your screen, or at worst the connection may fail.

The difference between real and fake telnet protocol is this: with real telnet protocol, a carriage return (CR) character being sent from the modem to the telnet server always has a NUL character added after it. The implementation of the telnet protocol used by some BBSes doesn't properly strip out the NUL character. When connecting to such BBSes (Particles! is one), use fake telnet.

When using real telnet protocol, when the telnet server sends a CR character followed by a NUL character, only the CR character will be sent to the serial port; the NUL character will be silently stripped out. With fake telnet protocol, the NUL will be passed through.
ATOReturn online. Use with the escape code (+++) to toggle between command and online modes.
ATQ?
ATQn
Enable or disable the display of result codes. The default is Q0.

  • Q0 Display result codes.
  • Q1 Suppress result codes (quiet).
ATRD
ATRT
Displays the current UTC date and time from NIST in the format YY-MM-DD HH:MM:SS. A WiFi connection is required and you cannot be connected to another site.
ATS0?
ATS0=n
Display or set the number of "rings" before answering an incoming connection. Setting S0=0 means "don't answer".
ATS2?
ATS2=n
Display or set the ASCII code used in the online escape sequence. The default value is 43 (the + plus character). Setting it to any value between 128 and 255 will disable the online escape function.
ATV?
ATVn
Display result codes in words or numbers. The default is V1.

  • V0 Display result codes in numeric form.
  • V1 Display result codes in text form.
ATX?
ATXn
Control the amount of information displayed in the result codes. The default is X1 (extended codes).

  • X0 Display basic codes (CONNECT, NO CARRIER)
  • X1 Display extended codes (CONNECT speed, NO CARRIER (connect time))
ATZResets the modem.
AT&D?
AT&Dn
Display or set the handling of DTR going inactive. The default is &D0 (ignored).

  • &D0 Ignore
  • &D1 Go to command mode
  • &D2 End call
  • &D3 Reset modem
AT&FReset the NVRAM contents and current settings to the sketch defaults. All settings, including SSID name, password and speed dial slots are affected.
AT&K?
AT&Kn
Data flow control. Prevents the modem's buffers for received and transmitted from overflowing.

  • &K0 Disable data flow control.
  • &K1 Use hardware flow control. Requires that your computer and software support Clear to Send (CTS) and Request to Send (RTS) at the RS-232 interface.
AT&R?
AT&R=server pwd
Query or change the password for incoming connections. If set, the user has 3 chances in 60 seconds to enter the correct password or the modem will end the connection.
AT&VnDisplay current or stored settings.

  • &V0 Display current settings.
  • &V1 Display stored settings.
AT&WSave current settings to NVRAM.
AT&Zn?
AT&Zn=host[:port],alias
Store up to 10 numbers in NVRAM, where n is the position 0-9 in NVRAM, and host[:port] is the host string, and alias is the speed dial alias name. The host string may be up to 50 characters long, and the alias string may be up to 16 characters long.

Example: AT&Z2=particlesbbs.dyndns.org:6400,particles

This number can then be dialed in any of the following ways:

  • ATDS2
  • ATDTparticles
  • ATDT2222222
AT$AE?
AT$AE=startup AT cmd
Query or change the command line to be executed when the modem starts up.
AT$AYTSends a Telnet "Are You There?" command if connected to a Telnet remote.
AT$BM?
AT$BM=server busy msg
Query or change a message to be returned to an incoming connection if the modem is busy (i.e. already has a connection established).
AT$MDNS
AT$MDNS=mDNS name
Query or change the mDNS network name (defaults to "espmodem"). When a non zero TCP port is defined, you can telnet to that port with telnet mdnsname.local port.
AT$PASS?
AT$PASS=WiFi pwd
Query or change the current WiFi password. The password is case sensitive. Clear the password by issuing the set command with no password. The maximum length of the password is 64 characters.
AT$SB?
AT$SB=n
Query or change the current baud rate. Valid values for "n" are 110, 300, 450, 600, 710, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 76800 and 115200. Any other value will return an ERROR message. The default baud rate is 1200. The Pico WiFi modem does not automatically detect baud rate like a dial-up modem. The baud rate setting must match that of your terminal to operate properly. It will display garbage in your terminal otherwise.
AT$SP?
AT$SP=n
TCP server port to listen on. A value of 0 means that the TCP server is disabled, and no incoming connections are allowed.
AT$SSID?
AT$SSID=ssid name
Query or change the current SSID to the specified name. The given SSID name is case sensitive. Clear the SSID by issuing the set command with no SSID. The maximum length of the SSID name is 32 characters.
AT$SU?
AT$SU=dps
Query or change the current number of data bits ('d'), parity ('p') and stop bits ('s") of the serial UART. Valid values for 'd' are 5, 6, 7 or 8 bits. Valid values for 'p' are (N)one, (O)dd or (E)ven parity. Valid values for 's' are 1 or 2 bits. The default settings are 8N1. The UART setting must match your terminal to work properly.
AT$TTL?
AT$TTL=telnet location
Query or change the Telnet location value to be returned when the Telnet server issues a SEND-LOCATION request. The default value is "Computer Room".
AT$TTS?
AT$TTS=WxH
Query or change the window size (columns x rows) to be returned when the Telnet server issues a NAWS (Negotiate About Window Size) request. The default value is 80x24. For terminals that are smaller than 80x24, setting these values appropriately will enable paging on the help (AT?) and network status (ATI) commands.
AT$TTY?
AT$TTY=terminal type
Query or change the terminal type to be returned when the Telnet server issues a TERMINAL-TYPE request. The default value is "ansi".
AT$W?
AT$W=n
Startup wait.

  • $W=0 Startup with no wait.
  • $W=1 Wait for the return key to be pressed at startup.

Parts

24
QtyValueFootprintReferences
7100nFCapacitor_SMD:C_0805_2012MetricC1, C2, C3, C4, C5, C6, C7
3560RResistor_SMD:R_0805_2012MetricR1, R2, R3
3FC-2012UGK-520D5EasyEDA:LED0805-R-RDD1, D2, D3
20805W8F5101T5EEasyEDA:R0805R6, R7
23.9KResistor_SMD:R_0805_2012MetricR4, R5
124LC32A-I/SNEasyEDA:SOIC-8_L4.9-W3.9-P1.27-LS6.0-BLU4
174HCT245EasyEDA:TSSOP-20_L6.5-W4.4-P0.65-LS6.4-BLU2
1DIN-802EasyEDA:CONN-TH_DIN-802J1
1K2-1102AQ-J4CW-01EasyEDA:KEY-TH_K2-1102AQ-JXXW-XXSW1
1PicoModule:RaspberryPi_Pico_W_SMDU3
1SP3238EEA-L/TREasyEDA:SSOP-28_L10.2-W5.3-P0.65-LS7.8-BLU1
1TYPE-C 16PIN 2MDEasyEDA:USB-C-SMD_TYPE-C-16PIN-2MD-073J2

Questions

How big is the MacPicoModem PCB?

It measures 67.6 × 128.2 mm and has 2 copper layers, 1.6 mm thick.

What parts does the MacPicoModem use?

24 parts, built around the 74HCT245, SP3238EEA-L/TR, 24LC32A-I/SN and NCD0805G1. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the MacPicoModem KiCad files?

From the gutbomb/MacPicoModem repository on GitHub, at the commit this page was made from: the board is pcb/MacPicoModem.kicad_pcb and its schematic pcb/MacPicoModem.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the MacPicoModem design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers180 × 160 mmPCE colorlight carrier, the printed circuit board in 3D

    PCE colorlight carrier

    supermomo31/PCE_colorlight_carrier

    console PCE depuis un FPGA format SODIMM : colorlight i5

    258 parts
  • 2 layers69 × 68.7 mmSGW-01 V1.0, the printed circuit board in 3D

    SGW-01 V1.0

    ymhtwe/SGW01

    ESP-IDF based IoT gateway for solar pump monitoring and control using SIM7600 4G modem and Modbus RTU.

    133 parts
  • 4 layers150 × 155 mmUsb console server, the printed circuit board in 3D

    Usb console server

    TheKingOfChaos/Console-Server

    48 RS-232 console ports on one Raspberry Pi: three identical boards, 16 ports each. Built from the design record of 2026-10-10. KiCad 10.0.7. This is Rev B (git tag rev-A is the first board).

    361 parts
  • 2 layers70 × 20 mmPicoBerry V1.0, the printed circuit board in 3D

    PicoBerry V1.0

    mfolejewski/PicoBerry

    PicoBerry - small CM4 carrier board with full 40-pin GPIO header

    36 parts63
  • 2 layers79.5 × 79.5 mmEsp32-energymeter V2, the printed circuit board in 3D

    Esp32-energymeter V2

    ElektorLabs/esp32-energymeter

    The Elektor ESP32 Energy Meter project, featuring schematics, PCB designs, and ESPHome integration for advanced energy monitoring

    116 parts48MIT
  • 4 layers240 × 90.5 mmBILLEE Rover Control Module V1, the printed circuit board in 3D

    BILLEE Rover Control Module V1

    BILLEE-BroncoSTAR/billee-hardware-2027

    Hardware and firmware Repository for BILLEE URC 2027

    276 parts1MIT
  • 4 layers80.6 × 60.6 mmLorawan sensor node v2, the printed circuit board in 3D

    Lorawan sensor node v2

    ElektorLabs/lorawan-sensor-node-v2

    Solar Powered LoRaWAN Sensor Node V2

    84 parts1GPL-3.0