Modules for access to system Bluetooth resources for the Nim programming language.
Use nimbluez/bluetooth
module for cross-platform discovery and managing Bluetooth devices and services.
For cross-platform low-level sockets interface implementation use nimbluez/bluetoothnativesockets
.
You can find wrappers for BlueZ in nimbluez/bluez
folder.
For Microsoft Bluetooth protocol stack wrappers look at nimbluez/msbt
.
To install using Nimble run the following:
$ nimble install nimbluez
You may need to install libbluetooth-dev
, if you see error could not load: libbluetooth.so
on application start.
# for Ubuntu
sudo apt install libbluetooth-dev
# Simple discovery example.
import nimbluez/bluetooth
echo "All visible remote devices:"
for remoteDevice in getRemoteDevices():
echo remoteDevice.address, " - ", remoteDevice.name
# Simple server example.
# Attention! This code does not contain error handling.
import nimbluez/bluetoothnativesockets
var serverSocket = newBluetoothNativeSocket(SOCK_STREAM, BTPROTO_RFCOMM)
var name = getRfcommAddr(RfcommPort(1))
discard bindAddr(serverSocket,
cast[ptr SockAddr](addr(name)),
sizeof(name).SockLen)
discard serverSocket.listen()
var
clientName = getRfcommAddr()
clientNameLen = sizeof(clientName).SockLen
var clientSocket = accept(serverSocket,
cast[ptr SockAddr](addr(clientName)),
addr(clientNameLen))
var message: string = ""
message.setLen(1000)
let recvLen = clientSocket.recv(cstring(message), cint(message.len), cint(0))
message.setLen(recvLen)
echo message
clientSocket.close()
serverSocket.close()
# Simple client example.
# Attention! This code does not contain error handling.
import nimbluez/bluetoothnativesockets
var socket = newBluetoothNativeSocket(SOCK_STREAM, BTPROTO_RFCOMM)
var name = getRfcommAddr(RfcommPort(1), "00:02:72:0F:5C:87")
discard connect(socket, cast[ptr SockAddr](addr(name)), sizeof(name).SockLen)
var message = "Hi there!"
discard send(socket, cstring(message), cint(message.len), cint(0))
socket.close()
For more examples look at examples
folder.