Edge Collective

Notes on Ham Radio

Notes on Ham Radio

2021-11-09 12:40:30

Notes on kits: https://www.hamradiosecrets.com/ham-radio-kits.html

APRS

DORJI

https://www.tindie.com/products/dorji_com/ham-amateur-radio-module-dra818v/

http://squirrelengineering.com/arduino/dra818v-aprs-144-390mhz/

https://hamgear.wordpress.com/2015/02/03/make-your-own-transceiver-with-a-dorji-dra818u-or-dra818v/

https://www.qrp-labs.com/

https://nescitech.org/ham-exam-contact-us/

QRP Labs device for $60: https://hackaday.com/2021/12/08/four-band-digital-hf-sdr-transceiver-offers-high-performance-for-only-60/


APRS on micros

Micromodem

Github repo for micromodem: https://github.com/markqvist/MicroModem

Key diagram for circuit: https://github.com/markqvist/MicroModem/blob/master/Documentation/Quickstart.pdf

Mobilinkd Arduino KISS TNC

http://www.mobilinkd.com/2014/09/11/arduino-kiss-tnc/

Uses the Sparkfun 3.5 mm jack breakout:

http://www.mobilinkd.com/wp-content/uploads/2014/09/Breadboard-TNC_bb_2.png

    Sleeve is ground.
    Ring2 is audio out (TX)
    Ring1 is PTT
    Tip is audio in (RX)

Adding GPS

use Example3_GetPosition from UBLOX GNSS Sparkfun lib https://github.com/sparkfun/SparkFun_u-blox_GNSS_Arduino_Library/archive/main.zip

Hmm ... module requires 3V ...

might need to try arduino pro mini 3V if avail ... or 5V tolerant gps module (adafruit's?)

Micromodem user manual

LibAPRS Tracker -- minified version of LibAPRS

https://github.com/barisdinc/LibAPRS_Tracker

LibAPRS

https://github.com/markqvist/LibAPRS

MicroAPRS

This is the code for handling APRS, allows for serial commands -- pin hardware might be fixed in firmware, not an issue

Expects to be run at 5V ... will need level shifters for ESP32, likely

Sat Oct 21 04:30:32 PM EDT 2023

https://oh2lak.blogspot.com/2017/06/experimenting-with-sa818-miniature-rf.html

https://www.youtube.com/@HB9BLA

Tue Feb 20 05:57:13 PM EST 2024

https://www.kenwood.com/i/products/info/amateur/ts50s.html

https://www.radiomods.co.nz/kenwood/kenwoodts50.html

https://www.reddit.com/r/amateurradio/comments/8oi0kr/new_ham_looking_at_used_kenwood_ts50_what_to_look/

Kenwood CAT interface

ft-891

suggests we want an AT50 tuner

AT50 tuner instruction manual

Kenwood TS-50S instruction manual

Power supply is Kenwood PS-33:

Possible compatibility? plug on amazon

Wiring diagram for TS-50S power cable

Replacement cable for TS-50S

Mon Apr 15 09:46:55 PM EDT 2024

'what to do when the phones go down' video

Fri Apr 19 06:17:47 PM EDT 2024

Getting started with JS8Call

receive-only

Fri Apr 19 08:38:04 PM EDT 2024

Virtual Audio Cable for linux here

Ham It Up adapter kit for sdr here

ham it up, by itself here

ham it up kit working well here

For those having trouble with the Ham It Up, this may be obvious to some, but frequencies below 14 MHz (20m HAM band) are best received at night. During the daytime you have a good chance of getting transmissions above 14 MHz. Also, I have tried using the Ham It Up in Windows 10 with SDR# and Kali Linux with SDR++. By far, the Kali setup works the best. I don't think you necessarily need the Kali Distro, that is just my setup. I will admit that the time investment needed to get this bundle operational is higher but if you do the research and don't give up the payoff is great.

The Ham It Up is a neat unit, but is genuinely hard to get started with due to wholly insufficient documentation. I was ready to write it off as junk before I finally figured out its antenna needs. Here is what you need to know from my hours of frustration:

FT8 shortwave listening

Tecsun PL880 shortwave radio, $169

CC Skywave SSB 2, $200

-- on amazon

SIHUADON R108 -- inexpensive knock-off of Skywave, $50

off-grid js8call setup with digital-only radio

DR4020 digital QRP radio

So -- better to use an sdr dongle, or a full short wave radio?

Sun Apr 21 03:09:31 PM EDT 2024

js8call here

T-Deck pinmap here

fdisk erase partitions tutorial

pi + baofeng aprs digipeater here

Sun Apr 21 11:20:13 PM EDT 2024

T-beam + external keyboard tutorial here and thread here

Using the 'canned message' meshtastic feature here

and the CardKB device described here

programming the CardKB here

documentation for CardKB i2c code here

electronoobs keyboard here -- this is the tutorial to try

antenna upgrades for meshtastic devices here

arduino as i2c slave here and here

using cardkb in a hack way with python

suggestion of mouse buttons for key buttons

connecting cardkb to raspberry pi here

Mon Apr 22 05:29:46 PM EDT 2024

Some example code for reading from a cardkb here

Creating an arduino i2c slave here -- see example 2. Arduino I2C Slave Transmitter Example

/*
* LAB Name: Arduino I2C Slave(Tx)
* Author: Khaled Magdy
* For More Info Visit: www.DeepBlueMbedded.com
*/
#include <Wire.h>
 
#define BTN0_PIN 4
#define BTN1_PIN 5
#define BTN2_PIN 6
#define BTN3_PIN 7
 
byte TxByte = 0;
 
void I2C_TxHandler(void)
{
  Wire.write(TxByte);
}
 
void setup() {
  pinMode(BTN0_PIN, INPUT_PULLUP);
  pinMode(BTN1_PIN, INPUT_PULLUP);
  pinMode(BTN2_PIN, INPUT_PULLUP);
  pinMode(BTN3_PIN, INPUT_PULLUP);
  Wire.begin(0x55); // Initialize I2C (Slave Mode: address=0x55 )
  Wire.onRequest(I2C_TxHandler);
}
 
void loop() {
  byte BtnsData = 0;
  BtnsData |= digitalRead(BTN0_PIN) << 0;
  BtnsData |= digitalRead(BTN1_PIN) << 1;
  BtnsData |= digitalRead(BTN2_PIN) << 2;
  BtnsData |= digitalRead(BTN3_PIN) << 3;
  TxByte = BtnsData;
  delay(10);
}

Sat Apr 27 06:30:16 PM EDT 2024

Ham it up explanatory video here

40 meter dipole antenna here

Creating a 40 meter antenna here

How to make a 40 meter dipole antenna here

making a 20 m and 40 m dipole antenna here

homemade balun -- SO2-39

definition of a balun here

complete off-grid HF ham pack here

js8call mesh experiment here

simplest dedicated js8call rig discussion here

Sun May 5 04:16:25 PM EDT 2024

heltec gps forum topic (including pins) here

flashing firmware on esp32 devices here

Sun May 5 06:53:55 PM EDT 2024

meshtastic message history, thread here

github most recent messages issue here

semi-relevant discussion here

meshcom -- mesh for ham radio operators, compatible with aprs here

Fri May 10 02:56:05 PM EDT 2024

Meshtastic device configuration here

#define CARDKB_ADDR 0x5F  //Define the I2C address of CardKB.
#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
}
void loop()
{
  Wire.requestFrom(CARDKB_ADDR, 1); //Request 1 byte from the slave device.
  while (Wire.available()) {
    char c = Wire.read(); 
    if (c != 0)
    {
      if (c == '\x0D') {
        Serial.println();
      }
      else {
      Serial.print(c);
    }
      //Serial.print(c,HEX);
    }
  }
}

/*
Example of processing incoming serial data without blocking.

Author:   Nick Gammon
Date:     13 November 2011. 
Modified: 31 August 2013.

Released for public use.
*/

#define CARDKB_ADDR 0x5F  //Define the I2C address of CardKB.
#include <Wire.h>

// how much serial data we expect before a newline
const unsigned int MAX_INPUTTY = 50;

void setup ()
  {
      Wire.begin();
  Serial.begin (115200);
  Serial1.begin(38400);
  } // end of setup

// here to process incoming serial data after a terminator received
void process_input_data (const char * data)
  {
  // for now just display it
  // (but you could compare it to some value, convert to an integer, etc.)
  Serial.println(data);
  }  // end of process_data

void process_output_data (const char * data)
  {
  // for now just display it
  // (but you could compare it to some value, convert to an integer, etc.)
  Serial1.println(data);
  }  // end of process_data
  
void processIncomingByte (const byte inByte)
  {
  static char input_line [MAX_INPUTTY];
  static unsigned int input_pos = 0;

  switch (inByte)
    {

    case '\n':   // end of text
      input_line [input_pos] = 0;  // terminating null byte
      
      // terminator reached! process input_line here ...
      process_input_data (input_line);
      
      // reset buffer for next time
      input_pos = 0;  
      break;

    case '\r':   // discard carriage return
      break;

    default:
      // keep adding if not full ... allow for terminating null byte
      if (input_pos < (MAX_INPUTTY - 1))
        input_line [input_pos++] = inByte;
        //Serial.print(inByte);
      break;

    }  // end of switch
   
  } // end of processIncomingByte  



  //void processOutgoingByte (const byte outByte)
   void processOutgoingByte (char outByte)
  {
  static char output_line [MAX_INPUTTY];
  static unsigned int output_pos = 0;

  switch (outByte)
    {

    case 0:
      break;


    case '\x0D':   // end of text
      output_line [output_pos] = 0;  // terminating null byte
      Serial.println();
      // terminator reached! process input_line here ...
      process_output_data (output_line);
      
      // reset buffer for next time
      output_pos = 0;  
      break;

    //case '\r':   // discard carriage return
    //break;

    default:
      // keep adding if not full ... allow for terminating null byte
      //Serial.print(outByte);
      if (output_pos < (MAX_INPUTTY - 1))
        output_line [output_pos++] = outByte;
        Serial.print(outByte);
      break;

    }  // end of switch
   
  } // end of processIncomingByte  


void loop()
  {
  // if serial data available, process it
  while (Serial1.available () > 0)
    processIncomingByte (Serial1.read ());
  
  Wire.requestFrom(CARDKB_ADDR, 1); //Request 1 byte from the slave device.
   while (Wire.available())
    processOutgoingByte (Wire.read());
  
  // do other stuff here like testing digital input (button presses) ...

  }  // end of loop

meshtastic_to_serial_cardkb

Sat May 11 04:42:13 PM EDT 2024

circuitpython module for waveshare e-paper here

arduino libraries for waveshare here

Sat May 11 07:13:12 PM EDT 2024

using cardkb in circuitpython here

cardkb layout here

better cardkb layout here

asking for enclosure with tbeam and cardkb here

up: 0xB5 down: 0xB6 left: 0xB4 right: 0xB7

wrapping text in circuitpython on a display here

Sun May 12 09:07:23 PM EDT 2024

RAK4631 documentation for module [here](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Overview/#product-description

RAK19007 is the base I bought. RAK19007 documentation here

RAK19007 product guide here

custom nodes here

Mon May 13 06:26:40 PM EDT 2024

nrf52 dongle prototyping here

nrf52 variant here

another nrf52 variant board here

board with adafruit feather express here

rak IO module on digikey here

rak19007 pinout description here

Mon May 13 10:01:22 PM EDT 2024

using the cli to talk / hear nodes here

rxd 7 txd 47 baud 38400 mode textmsg

in arduino ide, use 'new line'


waveshare:

guide for 2.13 e ink here

same on itsy m0, but: rst d7 busy d12

arduino library for waveshare here

getting serial data on arduino without blocking here

circuitpython tips and tricks here

meshtastic-to-serial is basic working version

suggestion on reading bytes from keyboard here

Tue May 14 03:02:50 PM EDT 2024

rtc power switches:

waveshare documentation for rp2040-lora-hf

circuitpython for the nrf dongle!! find it here

Really nice gitlab documentation for the dongle here: https://gitlab.com/shaktiproject/software/zephyr-rtos/blob/28b2f32967c9d463a25d4a9559a7a64cd183ba14/boards/arm/nrf52840_pca10059/doc/nrf52840_pca10059.rst

old issues around the dongle and adafruit bootloader: https://github.com/adafruit/Adafruit_nRF52_Arduino/issues/200

https://devzone.nordicsemi.com/f/nordic-q-a/39185/pca10059-replacing-stock-bootloader-with-adafruit-uf2-using-usb-dfua-signature-i-can-generate-a-zip-file-with-nrfutil-but-what-key-should-i-use-i-tried-to-use-just-a-private-key-and-flash-that-generated-packet-with-nrfutil-bu

this makes the bootloader process seem easy: https://koen.vervloesem.eu/blog/how-to-upgrade-the-adafruit-nrf52-bootloader/

THIS describes how to add the Adafruit UF2 bootloader, for sure (should compare to above): https://meshtastic.discourse.group/t/wip-diy-nrf82540-nicerf-868-4-2-inch-epaper/5552/14

Interesting device: https://wiki.aprbrother.com/en/BleUsbDongle.html#april-usb-dongle-52840

Sat May 18 07:50:16 PM EDT 2024

Adafruit sharp display -- some 'raw' code that isn't bit-banging: https://forum.pjrc.com/index.php?threads/adafruit-sharp-module.23852/

Sat May 18 08:24:22 PM EDT 2024

waveshare pi zero module 4g lte to make your own phone: https://www.amazon.com/Waveshare-SIM7600G-H-Raspberry-Supports-Positioning/dp/B08ZSSCYDD

pico 4g lte module a

building a cellular device with a pico, part 1 https://blog.smittytone.net/2021/08/20/how-to-build-a-cellular-iot-device-with-raspberry-pi-pico-part-one/

https://github.com/orgs/micropython/discussions/14356

beepberry here https://docs.m5stack.com/en/stamp/stamp_catm

Sun May 19 06:42:24 PM EDT 2024

Starting to try to add adafruit bootloader...

https://github.com/adafruit/Adafruit_nRF52_Bootloader

"Flashing nRF52840 USB Key bootloader": https://forums.adafruit.com/viewtopic.php?t=206837

https://www.rototron.info/circuitpython-nrf52840-dongle-openocd-pi-tutorial/

https://learn.adafruit.com/circuitpython-on-the-nrf52/nrf52840-bootloader

https://community.platformio.org/t/using-nordic-nrf52840-dongle-under-arduino-framework-with-platformio-vscode/24776

https://forums.adafruit.com/viewtopic.php?t=151127&start=15

pinout for jlink mini https://embeddedcomputing.weebly.com/segger-j-link-edu-mini-programmer-debugger.html

j-link connections

j-link user manual here

j-link hack:

followed https://learn.adafruit.com/circuitpython-on-the-nrf52/nrf52840-bootloader

installed nrfutil as per suggestion

used USB to power dongle; then hooked up SW pins as per 'j-link hack' pin assignments above

downloaded proper bootloader hex file for pca10059 from here: https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases/tag/0.9.0

used commands:

nrfjprog -f nrf52 --recover
nrfjprog -f nrf52 --eraseall
nrfjprog -f nrf52 --program pca10059_bootloader-0.9.0_s140_6.1.1.hex

main guide:

https://meshtastic.discourse.group/t/wip-diy-nrf82540-nicerf-868-4-2-inch-epaper/5552/20?page=2

pca10059 e-ink variant:

// NiceRF 868 LoRa module
#define USE_SX1262
#define SX126X_CS (0 + 31)     // LORA_CS     P0.31
#define SX126X_DIO1 (0 + 29)   // DIO1        P0.29
#define SX126X_BUSY (0 + 2)    // LORA_BUSY   P0.02
#define SX126X_RESET (32 + 15) // LORA_RESET  P1.15
#define SX126X_TXEN (32 + 13)  // TXEN        P1.13 NiceRF 868 dont use
#define SX126X_RXEN (32 + 10)  // RXEN        P1.10 NiceRF 868 dont use

pico variant:

#define LORA_SCK 10
#define LORA_MISO 12
#define LORA_MOSI 11
#define LORA_CS 3

#define LORA_DIO0 RADIOLIB_NC
#define LORA_RESET 15
#define LORA_DIO1 20
#define LORA_DIO2 2
#define LORA_DIO3 RADIOLIB_NC

#ifdef USE_SX1262
#define SX126X_CS LORA_CS
#define SX126X_DIO1 LORA_DIO1
#define SX126X_BUSY LORA_DIO2
#define SX126X_RESET LORA_RESET
#define SX126X_DIO2_AS_RF_SWITCH
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
#endif

reference for waveshare module https://www.waveshare.com/core1262-868m.htm

Was able to install CPY on dongle using UF2 here: https://circuitpython.org/board/pca10059/

building custom meshtastic firmware here

Mon May 20 09:56:53 PM EDT 2024

Itsy Bitsy pinout

TWC-4 assignment, using Adafruit nRF52 Feather Express:

// LEDs
#define PIN_LED1 (32 + 10) // Blue LED        P1.10
#define PIN_LED2 (32 + 15) // Built in Green  P1.15

// RGB NeoPixel LED2
// #define PIN_LED1 (0 + 8) Red
// #define PIN_LED1 (32 + 9) Green
// #define PIN_LED1 (0 + 12) Blue

#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2

#define LED_GREEN PIN_LED1
#define LED_BLUE PIN_LED2

#define LED_STATE_ON 0 // State when LED is litted

/*
 * Buttons
 */
#define PIN_BUTTON1 (32 + 2) // BTN_DN           P1.02 Built in button

/*
 * Analog pins
 */
#define PIN_A0 (0 + 29) // using VDIV (A6 / P0.29)

static const uint8_t A0 = PIN_A0;
#define ADC_RESOLUTION 14

// Other pins
#define PIN_AREF (-1) // AREF            Not yet used

static const uint8_t AREF = PIN_AREF;

/*
 * Serial interfaces
 */
#define PIN_SERIAL1_RX (0 + 24)
#define PIN_SERIAL1_TX (0 + 25)

// Connected to Jlink CDC
#define PIN_SERIAL2_RX (-1)
#define PIN_SERIAL2_TX (-1)

/*
 * SPI Interfaces
 */
#define SPI_INTERFACES_COUNT 1

#define PIN_SPI_MISO (0 + 15) // MISO      P0.15
#define PIN_SPI_MOSI (0 + 13) // MOSI      P0.13
#define PIN_SPI_SCK (0 + 14)  // SCK       P0.14

static const uint8_t SS = (0 + 6); // LORA_CS   P0.6
static const uint8_t MOSI = PIN_SPI_MOSI;
static const uint8_t MISO = PIN_SPI_MISO;
static const uint8_t SCK = PIN_SPI_SCK;

////#define USE_EINK
#define USE_SSD1306

/*
 * Wire Interfaces
 */
#define WIRE_INTERFACES_COUNT 1

#define PIN_WIRE_SDA (0 + 12) // SDA     P0.12
#define PIN_WIRE_SCL (0 + 11) // SCL     P0.11

// NiceRF 868 LoRa module
#define USE_SX1262
#define USE_LLCC68

#define SX126X_CS (0 + 6)     // LORA_CS     P0.06
#define SX126X_DIO1 (0 + 7)   // DIO1        P0.07
#define SX126X_BUSY (0 + 26)  // LORA_BUSY	  P0.26
#define SX126X_RESET (0 + 27) // LORA_RESET  P0.27
#define SX126X_DIO3_TCXO_VOLTAGE 1.8

#define PIN_GPS_EN (-1)
#define PIN_GPS_PPS (-1) // Pulse per second input from the GPS

#define GPS_RX_PIN PIN_SERIAL1_RX
#define GPS_TX_PIN PIN_SERIAL1_TX

// Battery
// The battery sense is hooked to pin A6 (0.29)
#define BATTERY_PIN PIN_A0
// and has 12 bit resolution
#define BATTERY_SENSE_RESOLUTION_BITS 12
#define BATTERY_SENSE_RESOLUTION 4096.0
#undef AREF_VOLTAGE
#define AREF_VOLTAGE 3.0
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
#define ADC_MULTIPLIER (2.0F)

NOTE: need to add these definitions for the itsybitsy meshtastic firmware (and choose free pins):

#define SX126X_TXEN (32 + 13)  // TXEN        P1.13 NiceRF 868 dont use
#define SX126X_RXEN (32 + 10)  // RXEN        P1.10 NiceRF 868 dont use

instructions for creating uf2 for nrf52 boards https://github.com/adafruit/Adafruit_nRF52_Bootloader

used

python3 uf2conv.py firmware.bin -c -b 0x26000 -f 0xADA52840

Tue May 21 05:33:04 PM EDT 2024

let's assign IB A2 / pin 28 -- serial.txd and assign IB A3 -- pin 31 -- serial.rxd

going to try to update bootloader on new itsybitsy board using command line process described here: https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather/update-bootloader-use-command-line

Tue May 21 07:20:04 PM EDT 2024

everything (no gps fix): 90 mA

remove gps: 26 mA

seems to go into state of 45 mA after a while of gps searching

keyboard seems to take about 5 mA

powering and no

25.6 without sd card, 26 with ... so sd card (not using) seems to take about .5 mA

sending lora packet gives spike of additional 55 mA

receive process seems similar (perhaps due to ack)

itsy bitsy seems to add about 10 mA

working configuration:

Meshtastic:

IB -- LoRa: as per the meshtastic firmware IB -- GPS: gps TX connects to IB RX, etc i2c pullups on oled using A2 and A3 on IB for serial mode

using an external SPI flash chip: https://learn.adafruit.com/building-circuitpython/choosing-a-different-spi-flash-chip

Sun May 26 01:00:53 PM EDT 2024

update: in circuitpython and in arduino, can set up sharp display on separate pins for spi bus and works fine alongside microSD

Mon May 27 05:20:53 PM EDT 2024

hiletgo neo 6m gps module here

waveshare sx1262 radio here

cardkb keyboard info page here

dimensions: 88545mm

grove connector on digikey here

grove connector footprint here

note: 'lay flat' grove connector is here

compass module from adafruit to add here

Adafruit 1.14" display here

Tue May 28 06:00:50 PM EDT 2024

Seeed info on grove connectors here

Info on right angle through-hole grove connector here

lsm303 compass fab:

Thu Jun 6 04:55:02 PM EDT 2024

.25, .4, .7 mm

Fri Jun 7 07:20:02 AM EDT 2024

waveshare sim7600 tutorial, jumpers https://core-electronics.com.au/guides/raspberry-pi-4g-gps-hat/

tutorial on AT commands https://www.industrialshields.com/blog/raspberry-pi-for-industry-26/how-to-send-and-receive-sms-with-raspberry-pi-automation-305

https://docs.monogoto.io/getting-started/general-device-configurations/iot-devices/simcom-sim7600g-h/waveshare-sim7600g-h

connecting to arduino https://www.waveshare.com/wiki/7600X_connect_Arduino

Mon Jun 10 06:33:06 PM EDT 2024

Datetime library for circuitpython https://github.com/adafruit/Adafruit_CircuitPython_datetime

Mon Jun 17 04:51:47 PM EDT 2024

Saving memory in circuitpython https://learn.adafruit.com/Memory-saving-tips-for-CircuitPython?view=all

Thu Jun 20 07:36:28 PM EDT 2024

meshtastic --set serial.enabled true --port /dev/ttyACM1 --set serial.mode TEXTMSG --set serial.rxd 31 --set serial.txd 28

Fri Jun 21 04:12:33 PM EDT 2024

This is what worked for updating the feather nrf52 express bootloader -- the command line: https://learn.adafruit.com/introducing-the-adafruit-nrf52840-feather/update-bootloader-use-command-line

Fri Jul 12 06:42:32 PM EDT 2024

GPS alternative, $11 on Amazon here:

inexpensive digital modes

Mon Oct 7 07:59:51 PM EDT 2024

https://qrper.com/2024/04/getting-started-with-hf-digital-modes-without-breaking-the-bank/