Радио модуль для Raspberry Pi

Хотите передавать данные с помощью вашей платы Raspberry Pi, управлять вашими радио-розетками (433МГц) или получать информацию от вашей портативной погодной станции за окном?
Но у вас нет желания разогревать вашу паяльную станцию и паять подобное решение самостоятельно. Вы хотите иметь элегантное и профессиональное решение европейского качества?

Если - да, то тогда вы в правильном месте!

Наш новый модуль Pi433 позволит вам в мгновение ока расширить функционал вашей Raspberry Pi приемо-передатчиком работающим на частоте 433 МГц. Pi433 удобно и легко устанавливается на разъёмы общего назначения вашей Raspberry. Он настолько компактен, что помещается практически во все доступные корпуса для Raspberry Pi.

Pi433 оборудован встроенной в печатную плату антенной, технические характеристики которой достаточны для большинства вариантов использования. Так же в модуле есть возможность подсоединения внешней антенны через U.FL разъём, что позволяет применять Pi433 в ещё более широком спектре технических решений.

Данный модуль открывает огромный простор для использования беспроводной коммуникации с вашей Raspberry Pi. Вы можете обмениваться беспроводной информацией, как между двумя Raspberry Pi, так и с другими устройствами работающими на 433МГц. Например радиоуправляемыми розетками, датчиками температуры, оконными ролетами и т.д.

Карта сайта

Особенности Pi433
Техническая информация
Установка Pi433
Управление Pi433
Приобретение Pi433
Контактные данные

Особенности Pi433

  • устанавливается на все вариатны серии плат Raspberry Pi (Pi zero требует дополнительной установки разъёма)
  • возможно установить на множество других устройств имеющих совместимый разъём (GPIO)(Banana Pi, Orange Pi, ...)
  • требует всего 10 пинов, все остальные могут быть исспользованы по вашему усмотрению
  • поддерживает, как прием, так и передачу данных
  • поддерживает несколько режимов модуляции сигнала (FSK, MSK, OOK)
  • поддерживает подстраиваемую частоту 433 МГц в ISM диапазоне (433,05...434,79MHz)
  • поддерживает режим FIFO, который позволяет сперва загрузить данные, а потом их передавать, без участия Raspberry Pi (нет необходимости делать pin toggeling)
  • так же имеет другие возможности ( например: генерация и обнаружение преамбулы, фильтр адресов, AES, CRC)
  • поддерживает подключение внешней антенны через U.FL разъём
  • Linux kernel driver интегрированный в официальное дерево, начиная с Linux kernel 4.14
  • cертификат CE

Техническая информация

Pi433 оснащен приемо-передатчиком RFM69 от фирмы HopeRf. Документация используемого модуля доступна в интернете, например здесь. Технические характеристики RFM69 практически полностью поддреживаются Pi433:
  • +13 дБм мощность выхода
  • Высокая чуствительность: до -120 дБм на 1.2 Кб/с
  • Высокая избирательность: 16-tap FIR фильтр канала
  • Программируемая Pout: -18дБм to +13 дБм с шагом 1дБм
  • Пропусканя способность FSK до 300 Кб/с
  • Полностью интегрированный синтезатор с разрешением 61 Гц
  • FSK, GFSK, MSK, GMSK и OOK модуляции
  • Встроенный синхронизатор битов выполняющий восстановление синхросигнала
  • Распознавание входного синхронизационного слова
  • 115 дБ+ динамический диапазон RSSI
  • Автоматический детектирование RF Sense с ультра-быстрым AFC
  • Пакетный препроцессор с CRC-16, AES-128, 66-byte FIFO
  • Встроенный температурный сенсор
Pi433 подсоединяет RFM69 к SPI интерфейсу Raspberry Pi, а так же три цифровых входа/выхода DIO0, DIO1 и DIO 2. Детали соединений представленны в следующей таблице.

модульRaspberry Pi
DIO0GPIO24
DIO1GPIO25
DIO2GPIO7

Установка Pi433

Pi433 может быть установлена в GPIO разъём Raspberry Pi.

На Raspberry Pi второго и третьего поколений, а так же в модели B+, Pi433 устанавливается в середине GPIO разъёма. Правильное положение - семь двойных пинов со стороны сетевого разъёма, с другой стороны восемь.

На первом поколении Raspberry Pi модуль устанавливается с краю разъёма GPIO со стороны разъёма RCA (video out).

Управление Pi433

Pi433 управляется через SPI интерфейс.
Детальное описание регистров и вариантов работы можно найти в документации модуля RFM69CW.

Ниже вы найдете два примера, которые демонстрируют идею работы с Pi433 через SPI интерфейс. Первый пример реализует простой передатчик, который передает телеграмму длиной в 16 байт, каждый раз по нажатию кнопки. Второй пример демонстрирует приемник этой телеграммы. Эти два примера используют несколько дополнительных функций предоставляемых модулем RFM69 для проверки ошибок передачи: генерация/обнаружение преамбулы, генерация синхро-слова и CRC.

пример кода передатчика.
/*
 * Pi433 tx demo
 *
 * Copyright (c) 2017 Marcus Wolf <marcus.wolf@wolf-entwicklungen.de>
 *
 * This program is free software; you can redistribute it and/or 
 * modify it under the terms of the GNU General Public License as 
 * published by the Free Software Foundation; either version 2 of
 * the License.
 *
 */

#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))

#define PAYLOAD_LEN 16

static void pabort(const char *s)
{
	perror(s);
	abort();
}

static	uint8_t bits = 8;
static	uint32_t speed = 500000;
static	uint16_t delay = 0;


static int setupRFParameters(int fd)
{
	int i, ret;

	uint8_t tx[] = {
	/* attention - do not modify this parameters */ 
	   unless you know what you do. 
	   Wrong settings may violate yapplicable law */
	0x81,0x04,	// set standby mode (just for safety)
	0x82,0x08,	// OOK, packet, no shaping
	0x91,0x9f,	// set up power amps
	0x98,0x08,	// antenna impedance (default: 50Ohm)
	0x87,0x6c,	// frequency
	0x88,0x7a,	// frequency
	0x89,0xe1,	// frequency
	0x83,0x1a,	// bit rate
	0x84,0x0a,	// bit rate
	0x85,0x00,	// deviation (FSK only)
	0x86,0x45,	// deviation (FSK only)
	0x92,0x09,	// pa ramp (default: 40µs)
	};

	for (i = 0; i < ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message to \
					setup RF parameters");
	}
	printf("RF parameters set up\n");
}

static int setupMessageParameters(int fd)
{
	int i, ret;

	uint8_t tx[] = {
	0xBC,0x80,	// startup condition (fifo not empty)
	0xB8,PAYLOAD_LEN,	// payload length
	0xAC,0x00,	// preamble size
	0xAD,0x0a,	// preamble size
	0xB7,0x10,	// fixed length, CRC on, no adress filtering
	0xAE,0x98,	// sync pattern on, 3 bytes
	0xAF,0x01,	// 1st sync byte
	0xB0,0x02,	// 2nd sync byte
	0xB1,0x03,	// 3rd sync byte
	};

	for (i = 0; i < ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message to setup \
					message parameters");
	}
	printf("message parameters set up\n");
}


static int transferData(int fd, unsigned int packetNr)
{
	int i, ret;

	uint8_t tx[] = {
	0x81,0x04, 	// stop transmission (in case stil active)
	/* load fifo */
	0x80,(packetNr & 0xff00) >> 8,
	0x80,packetNr & 0xff,
	0x80,0xAA,
	0x80,0x55,
	0x80,0x88,
	0x80,0x88,
	0x80,0x88,
	0x80,0x88,
	0x80,0x88,
	0x80,0x8E,
	0x80,0x8E,
	0x80,0x88,
	0x80,0x8E,
	0x80,0x8E,
	0x80,0x47,
	0x80,0x11,
	0x81,0x0c, 	// start transmission
	};

	for (i = 0; i < ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message \
					to trasmit data");
	}
	printf("Transmission started\n");
}

int main(int argc, char *argv[])
{
	int i;
	int fd;
        int packetNr = 0;


	printf("*** Pi433 TX demo by Marcus Wolf ***\n");
	printf("Press enter to send further telegrams.\n");
	printf("Enter 'q' to quit\n\n");

	/* open and configure SPI interface */
	fd = open("/dev/spidev0.0", O_RDWR);
	if (fd < 0)
		pabort("can't open spi. Maybe you need to enable \
				spi by calling \"raspi-config\"");

	setupRFParameters(fd);
	setupMessageParameters(fd);

	do
	{
		transferData(fd,packetNr++);
		sleep(1); // wait for transmission to complete
	} while(getchar() != 'q');

	close(fd);

	return 0;
}
				
пример кода передатчика.
/*
 * Pi433 rx demo
 *
 * Copyright (c) 2017 Marcus Wolf <marcus.wolf@wolf-entwicklungen.de>
 *
 * This program is free software; you can redistribute it and/or 
 * modify it under the terms of the GNU General Public License as 
 * published by the Free Software Foundation; either version 2 of
 * the License.
 *
 */

#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))

#define PAYLOAD_LEN 16

static void pabort(const char *s)
{
	perror(s);
	abort();
}

static	uint8_t bits = 8;
static	uint32_t speed = 500000;
static	uint16_t delay = 0;


static int setupRFParameters(int fd)
{
	int i, ret;

	uint8_t tx[] = {
	/* attention - do not modify this parameters */ 
	   unless you know what you do. 
	   Wrong settings may violate yapplicable law */
	0x81,0x04,	// set standby mode (just for safety)
	0x82,0x08,	// OOK, packet, no shaping
	0x91,0x9f,	// set up power amps
	0x98,0x08,	// antenna impedance (default: 50Ohm)
	0x87,0x6c,	// frequency
	0x88,0x7a,	// frequency
	0x89,0xe1,	// frequency
	0x83,0x1a,	// bit rate
	0x84,0x0a,	// bit rate
	0x85,0x00,	// deviation (FSK only)
	0x86,0x45,	// deviation (FSK only)
	0xA9,0x90,	// RSSI threshold
	0x9B,0x43,	// OOK threshold
	0x99,0x90,	// bandwidth configuration
	0x9A,0x90,	// bandwidth configuration
	0xEF,0x00,	// continuous Dagc in normal mode
	};

	for (i = 0; i < ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message \
					to setup RF parameters");
	}
	printf("RF parameters set up\n");
}

static int setupMessageParameters(int fd)
{
	int i, ret;

	uint8_t tx[] = {
	0xBC,0x80,	// startup condition (fifo not empty)
	0xB8,PAYLOAD_LEN,	// payload length
	0xAC,0x00,	// preamble size
	0xAD,0x0a,	// preamble size
	0xB7,0x10,	// fixed length, CRC on, no adress filtering
	0xAE,0x98,	// sync pattern on, 3 bytes
	0xAF,0x01,	// 1st sync byte
	0xB0,0x02,	// 2nd sync byte
	0xB1,0x03,	// 3rd sync byte
	};

	for (i = 0; i < ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message to \
					setup message parameters");
	}
	printf("message parameters set up\n");
}


static int receiveData(int fd)
{
	int i, ret;
	struct spi_ioc_transfer tr;
	struct data_struct {
		uint8_t reg;
		uint8_t value;
	};
	union data_union {
		struct data_struct strct;
		uint8_t array[2];
	} data;
	uint8_t rx[66];
	int messageLen;

	/* prepare tr struct */
	memset(&tr, 0, sizeof(tr));
	tr.tx_buf = (int)data.array;
	tr.rx_buf = (int)rx;
	tr.len = 2;
	tr.delay_usecs = delay;
	tr.speed_hz = speed;
	tr.bits_per_word = bits;

	/* start reception */
	data.strct.reg = 0x81; data.strct.value = 0x10;
	ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
	if (ret < 1)
		pabort("can't send spi message to \
				start reception\n");

	/* wait for CRC ok */
	rx[1]=0x00;
	while( (rx[1] & 0x02) == 0 )
	{
		data.strct.reg = 0x28; data.strct.value = 0;
		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message to \
					read flag register\n");
	}

	/* read fifo */
	data.strct.reg = 0x00; data.strct.value = 0;
	for (i = 0; i < ARRAY_SIZE(rx); i+=2)
	{
		tr.rx_buf = (int)rx+i;
		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message to read fifo");
	}

	/* set standby mode */
	data.strct.reg = 0x81; data.strct.value = 0x04;
	ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
	if (ret < 1)
		pabort("can't send spi message to switch to standby\n");

	/* every second value in buffer contains a valid value */
	for (i = 0; i < PAYLOAD_LEN*2; i+=2)
	{
		printf("0x%x ",rx[i+1]);
	}
	printf("\n");
}

int main(int argc, char *argv[])
{
	int i;
	int fd;
        int packetNr = 0;


	printf("*** Pi433 RX demo by Marcus Wolf ***\n");

	/* open and configure SPI interface */
	fd = open("/dev/spidev0.0", O_RDWR);
	if (fd < 0)
		pabort("can't open spi. Maybe you need to enable \
				spi by calling \"raspi-config\"");

	setupRFParameters(fd);
	setupMessageParameters(fd);

	/* receive */
	printf("entering endless loop to receive telegrams\n");

	while (1)
		receiveData(fd);

	/* these lines will never be reaced */
	close(fd);

	return 0;
}
				

Загрузить пример кода передатчика.
Загрузить пример кода приемника.

Следующий пример демонстрирует механизм контроля радиоуправляемой розетки. Пример написан для розеток с чипсетом PT2262 (или совместимых, например HX2262 и SC5272). Для управления другими типами розеток необходимо будет внести изменение в код. Текущий пример оптимизирован для работы с розетками PFS-3 от Pollin electronics.

пример кода для управления розетками.
/*
 * Pi433 socket demo (for sockets with PT2262 or compatible)
 *
 * Copyright (c) 2017 Marcus Wolf <marcus.wolf@wolf-entwicklungen.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License.
 *
 */

#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>

#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))

#define REPETITIONS 4
#define PAYLOAD_LEN 32*REPETITIONS

static void pabort(const char *s)
{
	perror(s);
	abort();
}

static	uint8_t bits = 8;
static	uint32_t speed = 500000;
static	uint16_t delay = 0;
static	uint8_t tx[PAYLOAD_LEN + 4];

static int setupRFParameters(int fd)
{
	int i, ret;

	uint8_t tx[] = {
	/* attention - do not modify this parameters unless you */
	/* know what you do */
	/* wrong settings may lead to violation of law */
	0x81,0x04,	// set standby mode (just for safety)
	0x82,0x08,	// OOK, packet, no shaping
	0x91,0x9f,	// set up power amps
	0x98,0x08,	// antenna impedance (default: 50Ohm)
	0x87,0x6c,	// frequency
	0x88,0x7a,	// frequency
	0x89,0xe1,	// frequency
	0x83,0x25,	// bit rate
	0x84,0xe0,	// bit rate
	0x92,0x09,	// pa ramp (default: 40µs)
	};

	for (i = 0; i %lt; ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message");
	}
	printf("RF parameter set up\n");
}

static int setupMessageParameters(int fd)
{
	int i, ret;

	uint8_t tx[] = {
	0xBC,0x80,		// startup condition: fifo not empty
	0xB8,PAYLOAD_LEN,	// payload length
	0xAC,0x00,		// preamble size
	0xAD,0x00,		// preamble size
	0xB7,0x10,		// fixed length, CRC off, no adress filtering
	0xAE,0x80,		// sync pattern config: off
	};

	for (i = 0; i < ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message");
	}
	printf("message parameter set up\n");
}


static int prepareTxDataOn(void)
{
	int i;

	/* stop transmission (in case stil active) */
	tx[0] = 0x81; tx[1] = 0x04;

	/* load fifo */
	for (i=0; i < REPETITIONS; i++)
	{
		/* This dataset is intended to control sockets
		   equipped with a PT2262 chip or comparable.
		   The second column contains the data.
		   0x88 = on, 0x8E = high-z.
		   Sockets of different companies use different
		   wiring on the PT chip. So maybe you need to tune.
		   Left comments shows most commen combination */
                tx[32*i+ 2] = 0x80; tx[32*i+ 3] = 0x88;     // 1            // 8
                tx[32*i+ 4] = 0x80; tx[32*i+ 5] = 0x88;     // 2            // 7
                tx[32*i+ 6] = 0x80; tx[32*i+ 7] = 0x88;     // 3            // 6
                tx[32*i+ 8] = 0x80; tx[32*i+ 9] = 0x88;     // 4            // 5
                tx[32*i+10] = 0x80; tx[32*i+11] = 0x88;     // 5            // open
                tx[32*i+12] = 0x80; tx[32*i+13] = 0x8E;     // 6            // open
                tx[32*i+14] = 0x80; tx[32*i+15] = 0x8E;     // A            // GND
                tx[32*i+16] = 0x80; tx[32*i+17] = 0x88;     // B            // GND
                tx[32*i+18] = 0x80; tx[32*i+19] = 0x8E;     // C            // Teste 1
                tx[32*i+20] = 0x80; tx[32*i+21] = 0x8E;     // D            // Teste 2
                tx[32*i+22] = 0x80; tx[32*i+23] = 0x88;     // L            // Taste 4?
                tx[32*i+24] = 0x80; tx[32*i+25] = 0x8E;     // R            // Taste 2
                tx[32*i+26] = 0x80; tx[32*i+27] = 0x80;     // S1           // S1
                tx[32*i+28] = 0x80; tx[32*i+29] = 0x00;     // S2           // S2
                tx[32*i+30] = 0x80; tx[32*i+31] = 0x00;     // S3           // S3
                tx[32*i+32] = 0x80; tx[32*i+33] = 0x00;     // S4           // S4
	}

	/* start transmission */
	tx[32*i+0] = 0x81; tx[32*i+1] = 0x0c;
}

static int prepareTxDataOff(void)
{
	int i;

	/* stop transmission (in case stil active) */
	tx[0] = 0x81; tx[1] = 0x04;

	/* load fifo */
	for (i=0; i < REPETITIONS; i++)
	{
		/* This dataset is intended to control sockets
		   equipped with a PT2262 chip or comparable.
		   The second column contains the data.
		   0x88 = on, 0x8E = high-z.
		   Sockets of different companies use different
		   wiring on the PT chip. So maybe you need to tune.
		   Left comments shows most commen combination */
                tx[32*i+ 2] = 0x80; tx[32*i+ 3] = 0x88;     // 1            // 8
                tx[32*i+ 4] = 0x80; tx[32*i+ 5] = 0x88;     // 2            // 7
                tx[32*i+ 6] = 0x80; tx[32*i+ 7] = 0x88;     // 3            // 6
                tx[32*i+ 8] = 0x80; tx[32*i+ 9] = 0x88;     // 4            // 5
                tx[32*i+10] = 0x80; tx[32*i+11] = 0x88;     // 5            // open
                tx[32*i+12] = 0x80; tx[32*i+13] = 0x8E;     // 6            // open
                tx[32*i+14] = 0x80; tx[32*i+15] = 0x8E;     // A            // GND
                tx[32*i+16] = 0x80; tx[32*i+17] = 0x88;     // B            // GND
                tx[32*i+18] = 0x80; tx[32*i+19] = 0x8E;     // C            // button 1
                tx[32*i+20] = 0x80; tx[32*i+21] = 0x8E;     // D            // button 3
                tx[32*i+22] = 0x80; tx[32*i+23] = 0x8E;     // left button  // button 4
                tx[32*i+24] = 0x80; tx[32*i+25] = 0x88;     // right button // button 2
                tx[32*i+26] = 0x80; tx[32*i+27] = 0x80;     // sync 1       // sync 1
                tx[32*i+28] = 0x80; tx[32*i+29] = 0x00;     // sync 2       // sync 2
                tx[32*i+30] = 0x80; tx[32*i+31] = 0x00;     // sync 3       // sync 3
                tx[32*i+32] = 0x80; tx[32*i+33] = 0x00;     // sync 4       // sync 4
	}

	/* start transmission */
	tx[32*i+0] = 0x81; tx[32*i+1] = 0x0c;
}


static int transferData(int fd, unsigned int packetNr)
{
	int i,ret;

	for (i = 0; i < ARRAY_SIZE(tx); i+=2)
	{
		struct spi_ioc_transfer tr =
		{
			.tx_buf = (int)tx+i,
			.rx_buf = 0,
			.len = 2,
			.delay_usecs = delay,
			.speed_hz = speed,
			.bits_per_word = bits,
		};

		ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
		if (ret < 1)
			pabort("can't send spi message");
	}
}

int main(int argc, char *argv[])
{
	int i;
	int fd;
        int packetNr = 0;


	printf("*** Pi433 socket demo by Marcus Wolf ***\n");

	/* open and configure SPI interface */
	fd = open("/dev/spidev0.0", O_RDWR);
	if (fd < 0)
		pabort("can't open spi");

	setupRFParameters(fd);
	setupMessageParameters(fd);

	printf("\nPress enter to toggle state of the socket.\n");
	printf("^C to quit\n");

	while(1)
	{
		sleep(1); // wait a sec for transmission to complete
		getchar();
		printf("On\n");
		prepareTxDataOn();
		transferData(fd,packetNr++);
		sleep(1); // wait a sec for transmission to complete
		getchar();
		printf("Off\n");
		prepareTxDataOff();
		transferData(fd,packetNr++);
	}

	close(fd);

	return 0;
}
				
Загрузить пример кода для управления розетками.

Как альтернативный способ управления Pi433 через SPI интерфейс можно использовать драйвер Linux. На данный момент в разработке. Драйвер предоставит следующие возможности:

  • удобное использование функций (open, read, write, close)
  • де-факто непрерывную приемо-передачу
  • доступ к Pi433 из нескольких приложений
  • использование произвольной длины телеграмм
  • легкое конфигурирование всех важных настроек модуля RFM69

Приобретение Pi433

Из-за правил утилизации (WEEE guideline of EU) Smarthome-Wolf принято решение о приостановке прямых продаж Pi433.

Бизнес партнёры (например: Онлайн магазины для продажи Raspberry-Pi и сопутствующих аксессуаров), которых интересует распространение Pi433 приглашаются к сотрудничеству.
Мы открыты к любым предложениям по сотрудничеству, как в Европе, так и за её пределами!


Pi433 - это продукт бренда Smarthome-Pi

Контактная информация

Smarthome-Wolf UG (haftungsbeschränkt)
Helene-Lange-Weg 23
80637 München
Адрес электронной почты защищён от спам-ботов! Для просмотра необходимо разрешить исполнение JavaScript информация

© Smarthome-Wolf UG (haftungsbeschränkt)