$$\   $$\  $$$$$$\ $$$$$$$$\ $$$$$$$$\  $$$$$$\  
$$$\  $$ |$$  __$$\\__$$  __|$$  _____|$$  __$$\ 
$$$$\ $$ |$$ /  $$ |  $$ |   $$ |      $$ /  \__|
$$ $$\$$ |$$ |  $$ |  $$ |   $$$$$\    \$$$$$$\  
$$ \$$$$ |$$ |  $$ |  $$ |   $$  __|    \____$$\ 
$$ |\$$$ |$$ |  $$ |  $$ |   $$ |      $$\   $$ |
$$ | \$$ | $$$$$$  |  $$ |   $$$$$$$$\ \$$$$$$  |
\__|  \__| \______/   \__|   \________| \______/ 
        
-------------------------------------------------------------------
HOME | TOR | GITHUB | MASTODON | NOTES | ABOUT | CONTACT | LOGIN
-------------------------------------------------------------------

  +--------------------+-------------+---------------------+------+---------+-----+  
  | TOUCHTUNES_JUKEBOX | KESTREL_BLE | CHEMION_LED_GLASSES | MATH | IRIDIUM | LTE |  
++---------------------------+-----------------+-----------------+-------------++
| DUMPING_NRF51822_FIRMWARE | YAESU_VX-7R_RPi | UNIPAGER POCSAG | MMDVM_GM300 |
+---------------------------+-----------------+-----------------+-------------+
            
            
██╗   ██╗ █████╗ ███████╗███████╗██╗   ██╗    ██╗   ██╗██╗  ██╗     ██████╗ ███████╗    ██████╗ ██████╗ ██╗
╚██╗ ██╔╝██╔══██╗██╔════╝██╔════╝██║   ██║    ██║   ██║╚██╗██╔╝     ██╔══██╗╚════██║    ██╔══██╗██╔══██╗██║
 ╚████╔╝ ███████║█████╗  ███████╗██║   ██║    ██║   ██║ ╚███╔╝█████╗██████╔╝    ██╔╝    ██████╔╝██████╔╝██║
  ╚██╔╝  ██╔══██║██╔══╝  ╚════██║██║   ██║    ╚██╗ ██╔╝ ██╔██╗╚════╝██╔══██╗   ██╔╝     ██╔══██╗██╔═══╝ ██║
   ██║   ██║  ██║███████╗███████║╚██████╔╝     ╚████╔╝ ██╔╝ ██╗     ██║  ██║   ██║      ██║  ██║██║     ██║
   ╚═╝   ╚═╝  ╚═╝╚══════╝╚══════╝ ╚═════╝       ╚═══╝  ╚═╝  ╚═╝     ╚═╝  ╚═╝   ╚═╝      ╚═╝  ╚═╝╚═╝     ╚═╝
 
                                                        
//=====< 2021-06-09T05:14:14+00:00 >===============================================\\
||                                                                                 ||
||     あの時だ! :D                                                                 ||
||                                                                                 ||
||     == INTRO ==                                                                 ||
||                                                                                 ||
||     I want to keep this one short and straight to the point. I built a RPi      ||
||     controller for my Yaesu VX-7R handheld so it can activate the PTT and       ||
||     transmit audio without human interaction. This project was the result of    ||
||     an experiment I had seeing if my handheld could work as a POCSAG            ||
||     transmitter. It didn’t work because the VX-7R doesn't support transmitting  ||
||     data at 9600 baud. More or less it took the 2FSK coming from the audio      ||
||     source and modulated it as NFM so in short, no beans… :/                    ||
||                                                                                 ||
||     Not to throw away a mostly working product I re-purposed my failed          ||
||     experiment so it can be a fake number station or something that can         ||
||     transmit automated messages like the weather or time. The fun part is I     ||
||     was able to do all of this using a bash script so there was no need to      ||
||     over complicate this project! :D                                            ||
||                                                                                 ||
||                                                                                 ||
||     == YAESU VX-7R 2.5MM JACK ==                                                ||
||                                                                                 ||
||     Yaesu handhelds use a 4 point 2.5mm jack for voice, speaker and data.       ||
||     I recycled a broken hand mic while building this so below is the wire       ||
||     coloring correlation and diagram for this jack. Wire colors may vary so     ||
||     always double check with a multimeter.                                      ||
||                                                                                 ||
||                                                                                 ||
||                     +--+   GND       MIC      DATA    SPEAKER                   ||
||                     |  +---------+---------+---------+                          ||
||                     |  |         |         |         +----+	                   ||
||                     |  |         |         |         |    |	                   ||
||                     |  |         |         |         +----+                     ||
||                     |  +---------+---------+---------+                          ||
||                     +--+                                                        ||
||                                                                                 ||
||                             +---------------------+                             ||
||                             | FUNCTION  |  COLOR  |                             ||
||                             +---------------------+                             ||
||                             | GND     -->   BRAID |                             ||
||                             | MIC     -->   WHITE |                             ||
||                             | DATA    -->   BLUE  |                             ||
||                             | SPEAKER -->   RED   |                             ||
||                             +---------------------+                             ||
||                                                                                 ||
||                                                                                 ||
||     == RPi SCHEMATIC ==                                                         ||
||                                                                                 ||
||     For this radio’s PTT to be activated Mic needs a 2.2K ohm resistance to     ||
||     ground.  Voice is also being carried over the same line while this          ||
||     resistance is applied so to create this a parallel circuit is needed.       ||
||     This took some creativity to make work because the RPi audio ground and     ||
||     RPi ground are on the same circuit and because I was using a NPN I had to   ||
||     fudge the RPi’s audio in to keep it from shorting. IE, I flipped the RPi’s  ||
||     audio wires so the RPi’s audio line is going into the Yaesu’s ground and    ||
||     vise versa. Below is schematic for this circuit.                            ||
||                                                                                 ||
||                                                                                 ||
||           RPi -> Yaesu VX-7r                                                    ||
||       +-----------------------------------------------------------------+       ||
||       |                                      +------+                   |       ||
||       |     +----------------+---------------+PI GND|                   |       ||
||       |     |                |               +------+                   |       ||
||       |     |                |                                          |       ||
||       |     |                ++\|    440Ω    +----------+               |       ||
||       |     |                   +--+/\/\/\+--+PI GPIO 17|               |       ||
||       |     |                + <|            +----------+               |       ||
||       |     |                |                                          |       ||
||       |     |                |  2.2KΩ                                   |       ||
||       |     |                + /\/\/\+                                  |       ||
||       |     | +------------+         |       +--------------------+     |       ||
||       |     | |PI AUDIO OUT+---------+-------+VX-7R MIC WHITE WIRE|     |       ||
||       |     | +------------+                 +--------------------+     |       ||
||       |     |                                                           |       ||
||       |     +-----------------------------+                             |       ||
||       |                                   |                             |       ||
||       |     +------------+                |  +--------------------+     |       ||
||       |     |PI AUDIO GND+-------------------+VX-7R GND BRAID WIRE|     |       ||
||       |     +------------+                |  +--------------------+     |       ||
||       |                                   |                             |       ||
||       |     +----------+                  |                             |       ||
||       |     |PI MIC GND+------------------+                             |       ||
||       |     +----------+                                                |       ||
||       |                                                                 |       ||
||       |     +---------+                      +--------------------+     |       ||
||       |     |PI MIC IN+----------------------+VX-7R AUDIO RED WIRE|     |       ||
||       |     +---------+                      +--------------------+     |       ||
||       +-----------------------------------------------------------------+       ||
||                                                                                 ||
||                                                                                 ||
||     == BASH SCRIPT ==                                                           ||
||                                                                                 ||
||     Here’s the bash script I used to control the Yaesu VX-7R. Included are      ||
||     a few examples such as using CW to broadcast your call sign, espeak to      ||
||     read words out loud, and how play a wav audio file.                         ||
||                                                                                 ||
||                                                                                 ||
||     tx.sh                                                                       ||
|| +-----------------------------------------------------------------------------+ ||
|| |  #!/bin/bash                                                                | ||
|| |                                                                             | ||
|| |  #######################################################                    | ||
|| |  # FILE:     tx.sh                                     #                    | ||
|| |  # AUTHOR:   NOTPIKE WU7ANG                            #                    | ||
|| |  # LICENSE:  MIT                                       #                    | ||
|| |  # FUNCTION: RPI TX SCRIPT FOR YAESU VX-7R             #                    | ||
|| |  #                                                     #                    | ||
|| |  # ==REQUIRED SOFTWARE==                               #                    | ||
|| |  # ~:$ sudo apt update                                 #                    | ||
|| |  # ~:$ sudo apt install cw espeak-ng                   #                    | ||
|| |  #######################################################                    | ||
|| |                                                                             | ||
|| |                                                                             | ||
|| |  ############ VARIABLES ############                                        | ||
|| |                                                                             | ||
|| |  CALLSIGN="AB7CDE"                                                          | ||
|| |  PHO_CALLSIGN="Alpha Brovo 7 Charlie Delta Echo"                            | ||
|| |  TEST_SENTENCE="The Quck Brown Fox"                                         | ||
|| |  GPIO=17                                                                    | ||
|| |                                                                             | ||
|| |  trap ctrl_c INT                                                            | ||
|| |                                                                             | ||
|| |                                                                             | ||
|| |  ############ FUNCTIONS ############                                        | ||
|| |                                                                             | ||
|| |  ## Trap function for ctrl_c, kills PTT                                     | ||
|| |  function ctrl_c() {                                                        | ||
|| |       printf "\n\n##STOPING##\n\n"                                          | ||
|| |       tx_off                                                                | ||
|| |       exit                                                                  | ||
|| |  }                                                                          | ||
|| |                                                                             | ||
|| |  ## TX ON                                                                   | ||
|| |  function tx_on() {                                                         | ||
|| |       ## Set GPIO to high                                                   | ||
|| |       echo "1" > /sys/class/gpio/gpio$GPIO/value                            | ||
|| |  }                                                                          | ||
|| |                                                                             | ||
|| |  ## TX OFF                                                                  | ||
|| |  function tx_off() {                                                        | ||
|| |       ## Set GPIO to low                                                    | ||
|| |       echo "0" > /sys/class/gpio/gpio$GPIO/value                            | ||
|| |  }                                                                          | ||
|| |                                                                             | ||
|| |  ## Numbers Station                                                         | ||
|| |  function numbers() {                                                       | ||
|| |       MAX_COUNT=10                                                          | ||
|| |       COUNT=1                                                               | ||
|| |                                                                             | ||
|| |       espeak-ng -g 40 "NUMBERS" 2> /dev/null                                | ||
|| |                                                                             | ||
|| |       while [ "$COUNT" -le $MAX_COUNT ]                                     | ||
|| |       do                                                                    | ||
|| |            NUMBER=$(( 1 + RANDOM %100 ))                                    | ||
|| |            echo $NUMBER | espeak-ng -g 40 2> /dev/null                      | ||
|| |            let "COUNT += 1"                                                 | ||
|| |       done                                                                  | ||
|| |  }                                                                          | ||
|| |                                                                             | ||
|| |  ## Date Time                                                               | ||
|| |  function date_time() {                                                     | ||
|| |       NOW=$(date "+%A, %B %d, %Y, Time %H %M")                              | ||
|| |       echo "Today is $NOW" | espeak-ng -g 40 2> /dev/null                   | ||
|| |  }                                                                          | ||
|| |                                                                             | ||
|| |  ## WAV File                                                                | ||
|| |  function play_wav() {                                                      | ||
|| |       aplay /home/pi/piano2.wav                                             | ||
|| |  }                                                                          | ||
|| |                                                                             | ||
|| |                                                                             | ||
|| |  ############ INIT ############                                             | ||
|| |                                                                             | ||
|| |  ## Set GPIO17 to out                                                       | ||
|| |  if [ ! -d "/sys/class/gpio/gpio$GPIO" ]; then                              | ||
|| |       echo "$GPIO" > /sys/class/gpio/export                                 | ||
|| |       echo "out" >  /sys/class/gpio/gpio$GPIO/direction                     | ||
|| |  fi                                                                         | ||
|| |                                                                             | ||
|| |                                                                             | ||
|| |  ############ MAIN ############                                             | ||
|| |                                                                             | ||
|| |  ## TX ON                                                                   | ||
|| |  tx_on                                                                      | ||
|| |                                                                             | ||
|| |                                                                             | ||
|| |  ## Callsign                                                                | ||
|| |  #echo $PHO_CALLSIGN | espeak-ng -g 20 2> /dev/null                         | ||
|| |  echo $CALLSIGN | cw -w 25 -t 1200 2> /dev/null                             | ||
|| |                                                                             | ||
|| |  ## Voice Example                                                           | ||
|| |  echo $TEST_SENTENCE | espeak-ng -g 4 2> /dev/null                          | ||
|| |                                                                             | ||
|| |  ## Date Time Example                                                       | ||
|| |  date_time                                                                  | ||
|| |                                                                             | ||
|| |  ## Numbers Station Example                                                 | ||
|| |  numbers                                                                    | ||
|| |                                                                             | ||
|| |  ## WAV Example                                                             | ||
|| |  play_wav                                                                   | ||
|| |                                                                             | ||
|| |  ## Close                                                                   | ||
|| |  espeak-ng -g 4 -p 25  "END OF LINE" 2> /dev/null                           | ||
|| |                                                                             | ||
|| |                                                                             | ||
|| |  ## TX OFF                                                                  | ||
|| |  tx_off                                                                     | ||
|| +-----------------------------------------------------------------------------+ ||
||                                                                                 ||
||     DOWNLOAD: tx.sh                                                             ||
||     IMG: rpi_yaesu_proto.jpg                                                    ||
||     IMG: rpi_yaesu.jpg                                                          ||
||     VIDEO: yaesu_rpi_example.mp4                                                ||
||                                                                                 ||
||                                                                                 ||
||     == Conclusion ==                                                            ||
||                                                                                 ||
||     Can’t wait to keep adding onto this project. I hope to be able to pipe      ||
||     the RX audio into the Rpi and do more advanced stuff such as remote         ||
||     control via DTMF for example. Hopefully you found this write up to be       ||
||     useful and happy hacking! :D                                                ||
||                                                                                 ||
||                                                                                 ||
||     == Update ==                                                                ||
||     There’s now a Python port available available on my Github! :D              ||
||     https://github.com/notpike/Hambone                                          ||
||                                                                                 ||
||     Expanding from where I left off, I added RX capability as well as porting   ||
||     over a DTMF decoder that was origionaly written by Alijamaliz.              ||
||     Right now it’s capable of listening for DTMF commands and will preform      ||
||     actions such as reading the Weather, Time, and Date with Google’s Text      ||
||     To Speech API and can preform an Echo Test by recording what it can hear    ||
||     then playing it back. My most resent work can be found in the dev branch    ||
||     in the repo.                                                                ||
||                                                                                 ||
||     -- NotPike                                                                  ||
||                                                                                 ||
\\=================================================================================//
                                                            \                        
                                                             \  ^__^                 
                                                              \ (--)\_______         
                                                                (__)\        )\/\    
                                                                 U  ||----w |        
                                                                    ||     ||