GNU Radio Companion 3.10.4.0 (Windows - Radioconda installer)
Arduino Uno
WL101-341 OOK/ASK receiver
PySerial 3.5 + Python 3.11.4


I copied pyserial-3.5.dist-info and serial folders from Python 3.11.4 to
C:\Users\<user>\radioconda\Lib\site-packages

grcx.jpg

 

 

grc-hist.jpg



Embedded Python block code
 

import numpy as np
import serial
from gnuradio import gr


class blk(gr.sync_block):  # other base classes are basic_block, decim_block, interp_block

    def __init__(self, comPort='COM5', comSpeed=38400.0, timeout=2):
        gr.sync_block.__init__(
            self,
            name='window voltage',
            in_sig=None,
            out_sig=[np.byte]
        )
        self.comPort = comPort
        self.comSpeed = comSpeed
        self.ser = serial.Serial(self.comPort, self.comSpeed)
        print(self.ser)

    def work(self, input_items, output_items):
        d = self.ser.read(64)
        i = 0
        for b in d:
           output_items[0][i] = b
           i = i + 1
        return len(output_items[0])

 

Arduino code

#define DATA_PIN      2
#define SERIAL_SPEED  38400
#define DATA_SIZE     64
 
#define pinOfPin(P)\
  (((P)>=0&&(P)<8)?&PIND:(((P)>7&&(P)<14)?&PINB:&PINC))
#define pinIndex(P)((uint8_t)(P>13?P-14:P&7))
#define pinMask(P)((uint8_t)(1<<pinIndex(P)))
 
#define isHigh(P)((*(pinOfPin(P))& pinMask(P))>0)
#define isLow(P)((*(pinOfPin(P))& pinMask(P))==0)
#define digitalState(P)((uint8_t)isHigh(P))
 
uint8_t data_1[DATA_SIZE];
uint8_t data_2[DATA_SIZE];
uint8_t buf_num = 1;
 
volatile uint8_t index = 0;
volatile bool sendData = false;
 
void setup() {
  Serial.begin(SERIAL_SPEED);
  pinMode(DATA_PIN, INPUT);
  memset(data_1, 0, sizeof(data_1));
  memset(data_2, 0, sizeof(data_2));
  attachInterrupt(digitalPinToInterrupt(DATA_PIN), isr, CHANGE);
}
 
void loop() {
  if (sendData) {
    index = 0;
    if (buf_num) {
      buf_num = 0;
      sendData = false;
      Serial.write(data_1, DATA_SIZE);
    }
    else {
      buf_num = 1;
      sendData = false;
      Serial.write(data_2, DATA_SIZE);
    }
  }
}
 
void isr() {
  static uint8_t p = 0;
  static uint8_t v = 0;
  if (!sendData) {
    // msbfirst (lsbfirst << n;)
    //v |= digitalRead(DATA_PIN) << (7 - p);
    v |= digitalState(DATA_PIN) << (7 - p);
    p++;
    if (p == 8) {
      if (buf_num) {
        data_1[index] = v;
      }
      else {
        data_2[index] = v;
      }
      v = 0;
      p = 0;
      index++;
      if (index == DATA_SIZE) {
        sendData = true;
      }
    }
  }
}
 
 
uno-ook.jpg