I HAVE TRIED ALL POSSIBLE INSTALLATION PROCEDURES BUT STILL GETTING THE IIO ERROR CONSISTENTLY. I HAVE USED THE FOLLOWING LINK TO INSTALL DEPENDENCIES AND THEN INSTALLED GNU RADIO 3.10.5.
https://wiki.analog.com/resources/tools-software/linux-software/gnuradio#download_and_build_libiio
AFTER THE INSTALLATION I AM FACING THE FOLLOWING ERROR:
<<< Welcome to GNU Radio Companion 3.10.5.0 >>>
Block paths:
/usr/share/gnuradio/grc/blocks
Loading: "/home/cipl/tyest1.grc"
>>> Done
Generating: '/home/cipl/tyest1.py'
Executing: /usr/bin/python3 -u /home/cipl/tyest1.py
Traceback (most recent call last):
File "/home/cipl/tyest1.py", line 169, in <module>
main()
File "/home/cipl/tyest1.py", line 147, in main
tb = top_block_cls()
File "/home/cipl/tyest1.py", line 99, in __init__
self.iio_fmcomms2_source_0 = iio.fmcomms2_source_fc32('ip:192.168.1.173', [True, True, False, False], 32768)
AttributeError: module 'gnuradio.iio' has no attribute 'fmcomms2_source_fc32'
>>> Done (return code 1)
PLEASE HELP WITH THE INSTALLATION PROCESS .
THANK YOU
Moved to Virtual Classroom for ADI University Program section.
Thanks,
Dragos
Can you provide the full python code?
-Travis
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: GPL-3.0
#
# GNU Radio Python Flow Graph
# Title: Adalm-Pluto Radar
# GNU Radio version: 3.10.4.0
from packaging.version import Version as StrictVersion
if __name__ == '__main__':
import ctypes
import sys
if sys.platform.startswith('linux'):
try:
x11 = ctypes.cdll.LoadLibrary('libX11.so')
x11.XInitThreads()
except:
print("Warning: failed to XInitThreads()")
from PyQt5 import Qt
from gnuradio import qtgui
from gnuradio.filter import firdes
import sip
from gnuradio import analog
from gnuradio import filter
from gnuradio import gr
from gnuradio.fft import window
import sys
import signal
from argparse import ArgumentParser
from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation
from gnuradio import iio
from gnuradio.qtgui import Range, GrRangeWidget
from PyQt5 import QtCore
from gnuradio import qtgui
class Radar(gr.top_block, Qt.QWidget):
def __init__(self):
gr.top_block.__init__(self, "Adalm-Pluto Radar", catch_exceptions=True)
Qt.QWidget.__init__(self)
self.setWindowTitle("Adalm-Pluto Radar")
qtgui.util.check_set_qss()
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except:
pass
self.top_scroll_layout = Qt.QVBoxLayout()
self.setLayout(self.top_scroll_layout)
self.top_scroll = Qt.QScrollArea()
self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
self.top_scroll_layout.addWidget(self.top_scroll)
self.top_scroll.setWidgetResizable(True)
self.top_widget = Qt.QWidget()
self.top_scroll.setWidget(self.top_widget)
self.top_layout = Qt.QVBoxLayout(self.top_widget)
self.top_grid_layout = Qt.QGridLayout()
self.top_layout.addLayout(self.top_grid_layout)
self.settings = Qt.QSettings("GNU Radio", "Radar")
try:
if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
self.restoreGeometry(self.settings.value("geometry").toByteArray())
else:
self.restoreGeometry(self.settings.value("geometry"))
except:
pass
##################################################
# Variables
##################################################
self.tx_att = tx_att = 70
self.tone_freq = tone_freq = 500
self.samp_rate = samp_rate = 2.304e6
self.rx_gain = rx_gain = 20
##################################################
# Blocks
##################################################
self._tx_att_range = Range(0, 100, 1, 70, 200)
self._tx_att_win = GrRangeWidget(self._tx_att_range, self.set_tx_att, "'tx_att'", "counter_slider", float, QtCore.Qt.Horizontal, "value")
self.top_layout.addWidget(self._tx_att_win)
self._tone_freq_range = Range(1, 1000, 1, 500, 200)
self._tone_freq_win = GrRangeWidget(self._tone_freq_range, self.set_tone_freq, "'tone_freq'", "counter_slider", float, QtCore.Qt.Horizontal, "value")
self.top_layout.addWidget(self._tone_freq_win)
self._rx_gain_range = Range(0, 73, 1, 20, 200)
self._rx_gain_win = GrRangeWidget(self._rx_gain_range, self.set_rx_gain, "'rx_gain'", "counter_slider", float, QtCore.Qt.Horizontal, "value")
self.top_layout.addWidget(self._rx_gain_win)
self.qtgui_time_sink_0 = qtgui.time_sink_c(
1024, #size
samp_rate, #samp_rate
"", #name
1, #number of inputs
None # parent
)
self.qtgui_time_sink_0.set_update_time(0.10)
self.qtgui_time_sink_0.set_y_axis(-1, 1)
self.qtgui_time_sink_0.set_y_label('Amplitude', "")
self.qtgui_time_sink_0.enable_tags(True)
self.qtgui_time_sink_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "")
self.qtgui_time_sink_0.enable_autoscale(False)
self.qtgui_time_sink_0.enable_grid(False)
self.qtgui_time_sink_0.enable_axis_labels(True)
self.qtgui_time_sink_0.enable_control_panel(False)
self.qtgui_time_sink_0.enable_stem_plot(False)
labels = ['', '', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ['blue', 'red', 'green', 'black', 'cyan',
'magenta', 'yellow', 'dark red', 'dark green', 'dark blue']
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0]
styles = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
markers = [-1, -1, -1, -1, -1,
-1, -1, -1, -1, -1]
for i in range(2):
if len(labels[i]) == 0:
if (i % 2 == 0):
self.qtgui_time_sink_0.set_line_label(i, "Re{{Data {0}}}".format(i/2))
else:
self.qtgui_time_sink_0.set_line_label(i, "Im{{Data {0}}}".format(i/2))
else:
self.qtgui_time_sink_0.set_line_label(i, labels[i])
self.qtgui_time_sink_0.set_line_width(i, widths[i])
self.qtgui_time_sink_0.set_line_color(i, colors[i])
self.qtgui_time_sink_0.set_line_style(i, styles[i])
self.qtgui_time_sink_0.set_line_marker(i, markers[i])
self.qtgui_time_sink_0.set_line_alpha(i, alphas[i])
self._qtgui_time_sink_0_win = sip.wrapinstance(self.qtgui_time_sink_0.qwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_time_sink_0_win)
self.qtgui_freq_sink_0 = qtgui.freq_sink_c(
1024, #size
window.WIN_BLACKMAN_hARRIS, #wintype
0, #fc
samp_rate, #bw
"", #name
1,
None # parent
)
self.qtgui_freq_sink_0.set_update_time(0.10)
self.qtgui_freq_sink_0.set_y_axis((-140), 10)
self.qtgui_freq_sink_0.set_y_label('Relative Gain', 'dB')
self.qtgui_freq_sink_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
self.qtgui_freq_sink_0.enable_autoscale(False)
self.qtgui_freq_sink_0.enable_grid(False)
self.qtgui_freq_sink_0.set_fft_average(1.0)
self.qtgui_freq_sink_0.enable_axis_labels(True)
self.qtgui_freq_sink_0.enable_control_panel(False)
self.qtgui_freq_sink_0.set_fft_window_normalized(False)
labels = ['', '', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ["blue", "red", "green", "black", "cyan",
"magenta", "yellow", "dark red", "dark green", "dark blue"]
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0]
for i in range(1):
if len(labels[i]) == 0:
self.qtgui_freq_sink_0.set_line_label(i, "Data {0}".format(i))
else:
self.qtgui_freq_sink_0.set_line_label(i, labels[i])
self.qtgui_freq_sink_0.set_line_width(i, widths[i])
self.qtgui_freq_sink_0.set_line_color(i, colors[i])
self.qtgui_freq_sink_0.set_line_alpha(i, alphas[i])
self._qtgui_freq_sink_0_win = sip.wrapinstance(self.qtgui_freq_sink_0.qwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_freq_sink_0_win)
self.low_pass_filter_0 = filter.fir_filter_ccf(
50,
firdes.low_pass(
1,
samp_rate,
(tone_freq*2),
250,
window.WIN_HAMMING,
6.76))
self.iio_pluto_source_0 = iio.fmcomms2_source_fc32('' if '' else iio.get_pluto_uri(), [True, True], 32768)
self.iio_pluto_source_0.set_len_tag_key('packet_len')
self.iio_pluto_source_0.set_frequency(3500000000)
self.iio_pluto_source_0.set_samplerate(int(samp_rate))
self.iio_pluto_source_0.set_gain_mode(0, 'manual')
self.iio_pluto_source_0.set_gain(0, rx_gain)
self.iio_pluto_source_0.set_quadrature(True)
self.iio_pluto_source_0.set_rfdc(True)
self.iio_pluto_source_0.set_bbdc(True)
self.iio_pluto_source_0.set_filter_params('Auto', '', 0, 0)
self.iio_pluto_sink_0 = iio.fmcomms2_sink_fc32('' if '' else iio.get_pluto_uri(), [True, True], 32768, False)
self.iio_pluto_sink_0.set_len_tag_key('')
self.iio_pluto_sink_0.set_bandwidth((int(samp_rate/2)))
self.iio_pluto_sink_0.set_frequency(3500000000)
self.iio_pluto_sink_0.set_samplerate(int(samp_rate))
self.iio_pluto_sink_0.set_attenuation(0, tx_att)
self.iio_pluto_sink_0.set_filter_params('Auto', '', 0, 0)
self.analog_sig_source_0 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, tone_freq, 1, 0, 0)
##################################################
# Connections
##################################################
self.connect((self.analog_sig_source_0, 0), (self.iio_pluto_sink_0, 0))
self.connect((self.iio_pluto_source_0, 0), (self.low_pass_filter_0, 0))
self.connect((self.low_pass_filter_0, 0), (self.qtgui_freq_sink_0, 0))
self.connect((self.low_pass_filter_0, 0), (self.qtgui_time_sink_0, 0))
def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "Radar")
self.settings.setValue("geometry", self.saveGeometry())
self.stop()
self.wait()
event.accept()
def get_tx_att(self):
return self.tx_att
def set_tx_att(self, tx_att):
self.tx_att = tx_att
self.iio_pluto_sink_0.set_attenuation(0,self.tx_att)
def get_tone_freq(self):
return self.tone_freq
def set_tone_freq(self, tone_freq):
self.tone_freq = tone_freq
self.analog_sig_source_0.set_frequency(self.tone_freq)
self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, (self.tone_freq*2), 250, window.WIN_HAMMING, 6.76))
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.analog_sig_source_0.set_sampling_freq(self.samp_rate)
self.iio_pluto_sink_0.set_bandwidth((int(self.samp_rate/2)))
self.iio_pluto_sink_0.set_samplerate(int(self.samp_rate))
self.iio_pluto_source_0.set_samplerate(int(self.samp_rate))
self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, (self.tone_freq*2), 250, window.WIN_HAMMING, 6.76))
self.qtgui_freq_sink_0.set_frequency_range(0, self.samp_rate)
self.qtgui_time_sink_0.set_samp_rate(self.samp_rate)
def get_rx_gain(self):
return self.rx_gain
def set_rx_gain(self, rx_gain):
self.rx_gain = rx_gain
self.iio_pluto_source_0.set_gain(0, self.rx_gain)
def main(top_block_cls=Radar, options=None):
if gr.enable_realtime_scheduling() != gr.RT_OK:
print("Error: failed to enable real-time scheduling.")
if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
style = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(style)
qapp = Qt.QApplication(sys.argv)
tb = top_block_cls()
tb.start()
tb.show()
def sig_handler(sig=None, frame=None):
tb.stop()
tb.wait()
Qt.QApplication.quit()
signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)
timer = Qt.QTimer()
timer.start(500)
timer.timeout.connect(lambda: None)
qapp.exec_()
if __name__ == '__main__':
main()
Can you manually specify the context as the IP of your Pluto? Are you able to access Pluto through IP of other tools like IIO-Scope?
-Travis
Im getting the same error while just trying to rx in the FM demod tutorial
89echo can you create a separate thread with the flowgraph and the output of an "iio_info -S" scan from the terminal.
-Travos
89echo can you create a separate thread with the flowgraph and the output of an "iio_info -S" scan from the terminal.
-Travos