BleuIO

BleuIO

  • Get Started
  • Buy Now
  • Manual
  • AT Commands
  • Help

›Scripts & Tutorials

Manual

  • How it works
  • How to use
  • Verbose Mode
  • Known Issues
  • Troubleshooting

Firmware Updates

    BleuIO Pro (SSD025)

    • Firmware Updates
    • Release History

    BleuIO (SSD005)

    • Firmware Updates
    • Release History of BleuIO (SSD005)

AT-Commands

  • List of AT Commands

BleuIO Libraries

  • JavaScript Library
  • Python Library

Scripts & Tutorials

  • Python: iBeacon
  • Python: Eddystone Beacon
  • Python: Scan
  • Python: Scan and Store
  • Python: SPS Script
  • Python: File transfer Script
  • Python: Repeater Script
  • Javascript: Google chrome.serial Beacon
  • C# Console App Example
  • C# WFA Example

Script using libraries

    Python library > v1.2.0

    • Custom Services example using Python library
    • Eddystone example using Python library
    • IBeacon example using Python library
    • Scan example using Python library
    • Scan and store example using Python library

    Python library < v1.2.0

    • Eddystone example using Python library
    • IBeacon example using Python library
    • Scan example using Python library
    • Scan and store example using Python library
    • SPS example using Python library
    • Security Example using Python library

    JS library

    • Eddystone example using Javascript library
    • IBeacon example using Javascript library
    • Scan example using Javascript library
    • Security Example using Javascript library
    • Get Device Distance

Projects

    Arduino

    • Arduino Example

    Beaglebone

    • Beaglebone Example

    Raspberry Pi

    • Raspberry PI into Beacon
    • Raspberry PI home automation

    Raspberry PI Pico

    • BleuIO integration (Part1)
    • BleuIO integration (Part2)
    • BleuIO integration (Part3)

    Renesas RA4M2

    • Signal Strength Monitoring
    • Real-Time CO2 monitor
    • Monitoring Air Quality

    STM32 Nucleo-144

    • Nucleo-144 board example
    • Smart Bulb Example

    M5Stack's CoreMP135

    • M5Stack's CoreMP135 board example

Build Your Own Firmware

  • Build Your Own Firmware
  • Advertising Example

More

  • Links
Order Now

BleuIO

$19.99

Buy Now

File transfer Script

This tutorial will show how to transfer files wirelessly over the Bluetooth Low Energy protocol. We will use two BleuIO dongles for this project—one for sending and another one for receiving. The sender dongle will be in central mode, while the receiver dongle will be in peripheral mode.

Transfer file wirelessly using bluetooth

We have already created two python scripts for sending and receiving. You can get the source code from

https://github.com/smart-sensor-devices-ab/bleuio_file_transfer_example

You can try this project on two different computers.

A video tutorial will show you how to do it on one computer and send files between two BleuIO dongles.

Requirements :

  • Two BleuIO dongles.
  • Python Scripts.
  • Pyserial.

Script for receiving file py_serial_recieve.py

import serial
import time

your_com_port = "COM6"  # Change this to the com port your dongle is connected to.
file_name = "result.png"  # Change this to match the file type you are recieving

connecting_to_dongle = True
trying_to_connect = False

print("Connecting to dongle...")
# Trying to connect to dongle until connected. Make sure the port and baudrate is the same as your dongle.
# You can check in the device manager to see what port then right-click and choose properties then the Port Settings
# tab to see the other settings
while connecting_to_dongle:
    try:
        console = serial.Serial(
            port=your_com_port,
            baudrate=57600,
            parity="N",
            stopbits=1,
            bytesize=8,
            timeout=0,
        )
        if console.is_open.__bool__():
            connecting_to_dongle = False
    except:
        print("Dongle not connected. Please reconnect Dongle.")
        time.sleep(5)

print("Connected to Dongle.")

file_data = ""
file_transfer_done = False
connected = "0"
line = ""
while 1 and console.is_open.__bool__() or not file_transfer_done:
    console.write(str.encode("AT+DUAL"))
    console.write("\r".encode())
    print("Putting dongle in Dual role.")
    time.sleep(0.1)
    console.write(str.encode("AT+ADVSTART"))
    console.write("\r".encode())
    time.sleep(0.1)
    print("Starting advertising and awaiting connection from other dongle...")
    while connected == "0":
        dongle_output2 = console.read(console.in_waiting)
        time.sleep(2)
        if not dongle_output2.isspace():
            if dongle_output2.decode().__contains__("\r\nCONNECTED."):
                connected = "1"
                print("Connected!")
            if dongle_output2.decode().__contains__("\r\nDISCONNECTED."):
                connected = "0"
                print("Disconnected!")
            dongle_output2 = " "
    while connected == "1" or not file_transfer_done:
        time.sleep(0.2)
        dongle_output3 = console.read(console.in_waiting)
        if not dongle_output3.isspace():
            if dongle_output3.__contains__(str.encode("\r\nDISCONNECTED.")):
                print("Disconnected!")
                connected = "0"
            elif dongle_output3.__contains__(str.encode("[DONE]")):
                file_transfer_done = True
                print("File transfer complete!\r\n")
                fo = open(file_name, "wb")
                hex = bytes.fromhex(file_data)
                fo.write(hex)
                fo.close()
                print("Exiting script...")
                exit()
            elif dongle_output3.__contains__(str.encode("[Received]:")):
                line = dongle_output3.decode()
                line = line.replace("\r", "")
                line = line.replace("\n", "")
                line = line.replace("[Received]:", "")
                line = line.replace(" ", "")
                file_data += line
                print(line)
            dongle_output3 = ""
        msg = ""

Script for sending file py_serial_transfer.py

    import serial
    import time

    target_dongle_mac_address = (
        "[0]40:48:FD:E5:2D:AF"  # Change this to the peripheral's mac address.
    )
    your_com_port = "COM25"  # Change this to the com port your dongle is connected to.

    connecting_to_dongle = True
    trying_to_connect = False
    file_name = "test.txt"

    print("Connecting to dongle...")
    # Trying to connect to dongle until connected. Make sure the port and baudrate is the same as your dongle.
    # You can check in the device manager to see what port then right-click and choose properties then the Port Settings
    # tab to see the other settings
    while connecting_to_dongle:
        try:
            console = serial.Serial(
                port=your_com_port,
                baudrate=57600,
                parity="N",
                stopbits=1,
                bytesize=8,
                timeout=0,
            )
            if console.is_open.__bool__():
                connecting_to_dongle = False
        except:
            print("Dongle not connected. Please reconnect Dongle.")
            time.sleep(5)

    print("Connected to Dongle.")

    connected = "0"
    while 1 and console.is_open.__bool__():
        console.write(str.encode("AT+DUAL"))
        console.write("\r".encode())
        time.sleep(0.1)
        print("Putting dongle in Dual role and trying to connect to other dongle.")
        while connected == "0":
            time.sleep(0.5)
            if not trying_to_connect:
                console.write(str.encode("AT+GAPCONNECT="))
                console.write(str.encode(target_dongle_mac_address))
                console.write("\r".encode())
                trying_to_connect = True
            dongle_output2 = console.read(console.in_waiting)
            time.sleep(2)
            print("Trying to connect to Peripheral...")
            if not dongle_output2.isspace():
                if dongle_output2.decode().__contains__("\r\nCONNECTED."):
                    connected = "1"
                    print("Connected!")
                    time.sleep(10)
                if dongle_output2.decode().__contains__("\r\nDISCONNECTED."):
                    connected = "0"
                    print("Disconnected!")
                    trying_to_connect = False
                dongle_output2 = " "
        while connected == "1":
            dongle_output3 = console.read(console.in_waiting)
            want_to_exit = input(
                "Press Enter to start sending file or 'exit' to quit script.\n\r>> "
            )
            want_to_exit = want_to_exit.upper()
            if "EXIT" in want_to_exit:
                print("Exiting script...")
                exit()
            hex_to_send = ""
            fo2 = open(file_name, "rb")
            print("Sending file. Please wait...")
            while (byte := fo2.read(1)) :
                hex_to_send += byte.hex().upper()
                if len(hex_to_send) >= 200:
                    # my_dongle.at_spssend(hex_to_send)
                    console.write(str.encode("AT+SPSSEND=" + hex_to_send + "\r"))
                    time.sleep(0.2)
                    hex_to_send = ""
            if len(hex_to_send) != 0:
                # my_dongle.at_spssend(hex_to_send)
                console.write(str.encode("AT+SPSSEND=" + hex_to_send + "\r"))
                time.sleep(0.2)
            fo2.close()
            console.write(str.encode("AT+SPSSEND=[DONE]\r"))
            print("File transfer complete!\r\n")
            print("Exiting script...")
            exit()

Steps:

  1. First, connect two BleuIO dongles to your computer.
  2. Note down the COM port for each dongle. You can find the port using device manager.
  3. Try to find receiver dongle MAC id. To do that, start advertising your receiver dongle and note down the MAC id. Follow the video if you need more details on how to do it.
  4. Open file_recieve.py and file_transfer.py files. Update COM port and MAC id where necessary.
  5. Set the file type that you are expecting to receive. For example, if you are expecting a jpg file, change file_name on file_recieve.py to result.jpg, and for a text file, you can rename it to result.txt
  6. Keep the file in the same directory with file_transfer.py and change the file name accordingly.
  7. Now run the script file_recieve.py using a terminal. It will start advertising and will be ready to receive.
  8. Now run the file_transfer.py script.
  9. Once both the dongles are connected, you will be asked to send the file from the file transfer script.
  10. The receiver dongle will give you a confirmation once received, and you will find the file stored in the same folder with the receiver script.
  11. Finally, you can check if you received the file correctly by running a checksum.

Please follow the video if you have difficulty in understanding.

````
← Python: SPS ScriptPython: Repeater Script →

Support Request

If you have any queries or technical questions, please don't hesitate to send us a message. We will reply within 24 hours.

Message Sent!

Docs
ManualAT CommandsHelp
Community
YouTubeLinkedInFacebook
More
BleuIOSmart Sensor DevicesGitHub
Sales & Support
support@bleuio.comsales@bleuio.com
Copyright © 2025 BleuIO. A product of Smart Sensor Devices