Demo of how to use CC1200 radios to send data.

Dependencies:   CC1200

CC1200 Example Project

This project shows how to use my Mbed OS CC1200 driver to send messages over the air. It connects to the radio chips, configures them (using a couple of different configurations converted from SmartRF), and sends a message from a transmitter chip to a receiver.

Hardware Setup

This program assumes that two CC1200s are connected to your processor's SPI bus. The CC1200s' circuit boards must be configured for the 900MHz band. Also, if you are connecting the two radios together directly with a cable, make sure to include an attenuator (-20dB should work) to prevent overloading the radios' RX inputs.

I used a custom circuit board for my testing, but you should also be able to use an Mbed board connected to two CC1200 eval kits to run the program.

Note: License free transmission on the 900MHz band is only legal in Region 2 countries (North and South America). Make sure to follow all local regulations covering radio transmissions!

Committer:
MultipleMonomials
Date:
Mon Aug 10 01:57:54 2020 -0700
Revision:
0:ea2678a73bde
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MultipleMonomials 0:ea2678a73bde 1 #ifndef SERIALSTREAM_H
MultipleMonomials 0:ea2678a73bde 2 #define SERIALSTREAM_H
MultipleMonomials 0:ea2678a73bde 3
MultipleMonomials 0:ea2678a73bde 4 #include <mbed.h>
MultipleMonomials 0:ea2678a73bde 5 #include <platform/Stream.h>
MultipleMonomials 0:ea2678a73bde 6
MultipleMonomials 0:ea2678a73bde 7 /**
MultipleMonomials 0:ea2678a73bde 8 * SerialStream
MultipleMonomials 0:ea2678a73bde 9 * Bringing MBed serial ports back like it's 1999... or at least 2019.
MultipleMonomials 0:ea2678a73bde 10 *
MultipleMonomials 0:ea2678a73bde 11 * This class adapts an MBed 6.0 serial port class into a Stream instance.
MultipleMonomials 0:ea2678a73bde 12 * This lets you do two useful things with it:
MultipleMonomials 0:ea2678a73bde 13 * - Call printf() and scanf() on it
MultipleMonomials 0:ea2678a73bde 14 * - Pass it to code that expects a Stream to print things on.
MultipleMonomials 0:ea2678a73bde 15 *
MultipleMonomials 0:ea2678a73bde 16 */
MultipleMonomials 0:ea2678a73bde 17 template<class SerialClass>
MultipleMonomials 0:ea2678a73bde 18 class SerialStream : public Stream
MultipleMonomials 0:ea2678a73bde 19 {
MultipleMonomials 0:ea2678a73bde 20 SerialClass & serialClass;
MultipleMonomials 0:ea2678a73bde 21
MultipleMonomials 0:ea2678a73bde 22 public:
MultipleMonomials 0:ea2678a73bde 23
MultipleMonomials 0:ea2678a73bde 24 /**
MultipleMonomials 0:ea2678a73bde 25 * Create a SerialStream from a serial port.
MultipleMonomials 0:ea2678a73bde 26 * @param _serialClass BufferedSerial or UnbufferedSerial instance
MultipleMonomials 0:ea2678a73bde 27 * @param name The name of the stream associated with this serial port (optional)
MultipleMonomials 0:ea2678a73bde 28 */
MultipleMonomials 0:ea2678a73bde 29 SerialStream(SerialClass & _serialClass, const char *name = nullptr):
MultipleMonomials 0:ea2678a73bde 30 Stream(name),
MultipleMonomials 0:ea2678a73bde 31 serialClass(_serialClass)
MultipleMonomials 0:ea2678a73bde 32 {
MultipleMonomials 0:ea2678a73bde 33 }
MultipleMonomials 0:ea2678a73bde 34
MultipleMonomials 0:ea2678a73bde 35
MultipleMonomials 0:ea2678a73bde 36 private:
MultipleMonomials 0:ea2678a73bde 37
MultipleMonomials 0:ea2678a73bde 38 // override Stream::read() and write() to call serial class directly.
MultipleMonomials 0:ea2678a73bde 39 // This avoids the overhead of feeding in individual characters.
MultipleMonomials 0:ea2678a73bde 40 virtual ssize_t write(const void *buffer, size_t length)
MultipleMonomials 0:ea2678a73bde 41 {
MultipleMonomials 0:ea2678a73bde 42 return serialClass.write(buffer, length);
MultipleMonomials 0:ea2678a73bde 43 }
MultipleMonomials 0:ea2678a73bde 44
MultipleMonomials 0:ea2678a73bde 45 virtual ssize_t read(void *buffer, size_t length)
MultipleMonomials 0:ea2678a73bde 46 {
MultipleMonomials 0:ea2678a73bde 47 return serialClass.read(buffer, length);
MultipleMonomials 0:ea2678a73bde 48 }
MultipleMonomials 0:ea2678a73bde 49
MultipleMonomials 0:ea2678a73bde 50 // Dummy implementations -- these will never be called because we override write() and read() instead.
MultipleMonomials 0:ea2678a73bde 51 // but we have to override them since they're pure virtual.
MultipleMonomials 0:ea2678a73bde 52 virtual int _putc(int c) { return 0; }
MultipleMonomials 0:ea2678a73bde 53 virtual int _getc() { return 0; }
MultipleMonomials 0:ea2678a73bde 54 };
MultipleMonomials 0:ea2678a73bde 55
MultipleMonomials 0:ea2678a73bde 56 #endif //SERIALSTREAM_H