I am excited to have just discovered Evothings and I fully intend to do my own reading and research, but I wondered if anyone could provide some hints to quickly get Evothings talking to my Microduino-BT, which is a BLE shield based upon the Huamao HM-10, which itself is based on the TI CC2540 BLE SoC. Any and all assistance will be most appreciated.
Don
New to Evothings, First Question
Re: New to Evothings, First Question
this board is very similar to the Bluno - which was posted on a while ago here
viewtopic.php?f=3&t=140
on one of the links you provided; there was a zip file "BLE debug uart1.zip" that contains a .ino sketch. from what it looks like, Serial1 is used to directly access the BLE communications channel and you should be able to use any of our simple "Arduino BLE" examples to connect to it - all you need to know is the appropriate UUID for the board.
the Bluno uses the exact same TI BLE chip (CC2540) and you should able to use a BLE discovery tool such as LightBlue to see what services and characteristics exist on the device and try to connect to them directly - each manufacturer may have a different UUID and BLE name associated to each set of boards/shields.
viewtopic.php?f=3&t=140
on one of the links you provided; there was a zip file "BLE debug uart1.zip" that contains a .ino sketch. from what it looks like, Serial1 is used to directly access the BLE communications channel and you should be able to use any of our simple "Arduino BLE" examples to connect to it - all you need to know is the appropriate UUID for the board.
Code: Select all
String tmp="";
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
};
void loop() {
while (Serial1.available() > 0) {
tmp += char(Serial1.read());
delay(2);
}
if(tmp.length() > 0) {
Serial.println(tmp);
tmp = "";
}
if (Serial.available()) {
Serial1.write(Serial.read());
}
}
the Bluno uses the exact same TI BLE chip (CC2540) and you should able to use a BLE discovery tool such as LightBlue to see what services and characteristics exist on the device and try to connect to them directly - each manufacturer may have a different UUID and BLE name associated to each set of boards/shields.
Re: New to Evothings, First Question
Thanks for the info. I will try to play with it over the weekend.
I was worried that something non-standard might be going on in the microcontroller code on the HM-10, but you are right in that it has to be advertised as a standard service on the radio side in order for it to connect to other devices. I just need to learn what that service is and what its characteristics are.
Don
I was worried that something non-standard might be going on in the microcontroller code on the HM-10, but you are right in that it has to be advertised as a standard service on the radio side in order for it to connect to other devices. I just need to learn what that service is and what its characteristics are.
Don
Re: New to Evothings, First Question
Still working on this, but I will share as I go in case that helps anyone else.
Here is what I find using BLE Discovery...
I've downloaded this Android app (apk) from Huamao, http://huamaosoft.cn/HMBLEComAssistant.rar, and used it to get bi-directional serial communication working over BLE between a Nexus 7 and my laptop with a USB-TTL converter. I also de-compiled and examined the code, but it seems quite complicated for the simple function it is performing (basically a serial terminal). It will take me a while to fully understand it, if I even can with reasonable effort, but I did find explicit references to UUID_NOTIFY being ffe1 (c10) and UUID_SERVICE being ffe0 (s3). Curious what the other UUIDs are for, and wondering if they might be something useful.
Don
Here is what I find using BLE Discovery...
Code: Select all
LOG: Stopping scan...
LOG: connect(00:17:EA:92:CC:1A)
LOG: connect 1 state 2
LOG: connected, requesting services...
LOG: s1: 0 00001800-0000-1000-8000-00805f9b34fb. 5 chars.
LOG: c4: 00002a00-0000-1000-8000-00805f9b34fb. 0 desc.
LOG: properties: PROPERTY_READ
LOG: writeType: WRITE_TYPE_DEFAULT
LOG: c5: 00002a01-0000-1000-8000-00805f9b34fb. 0 desc.
LOG: properties: PROPERTY_READ
LOG: writeType: WRITE_TYPE_DEFAULT
LOG: c6: 00002a02-0000-1000-8000-00805f9b34fb. 0 desc.
LOG: properties: PROPERTY_READ PROPERTY_WRITE
LOG: writeType: WRITE_TYPE_DEFAULT
LOG: c7: 00002a03-0000-1000-8000-00805f9b34fb. 0 desc.
LOG: properties: PROPERTY_READ PROPERTY_WRITE
LOG: writeType: WRITE_TYPE_DEFAULT
LOG: c8: 00002a04-0000-1000-8000-00805f9b34fb. 0 desc.
LOG: properties: PROPERTY_READ
LOG: writeType: WRITE_TYPE_DEFAULT
LOG: s2: 0 00001801-0000-1000-8000-00805f9b34fb. 1 chars.
LOG: c9: 00002a05-0000-1000-8000-00805f9b34fb. 1 desc.
LOG: properties: PROPERTY_INDICATE
LOG: writeType: WRITE_TYPE_DEFAULT
LOG: d11: 00002902-0000-1000-8000-00805f9b34fb
LOG: s3: 0 0000ffe0-0000-1000-8000-00805f9b34fb. 1 chars.
LOG: c10: 0000ffe1-0000-1000-8000-00805f9b34fb. 2 desc.
LOG: properties: PROPERTY_READ PROPERTY_WRITE_NO_RESPONSE PROPERTY_NOTIFY
LOG: writeType: WRITE_TYPE_NO_RESPONSE
LOG: d12: 00002902-0000-1000-8000-00805f9b34fb
LOG: d13: 00002901-0000-1000-8000-00805f9b34fb
LOG: rd 13
LOG: rdw 13: HMSoft
I've downloaded this Android app (apk) from Huamao, http://huamaosoft.cn/HMBLEComAssistant.rar, and used it to get bi-directional serial communication working over BLE between a Nexus 7 and my laptop with a USB-TTL converter. I also de-compiled and examined the code, but it seems quite complicated for the simple function it is performing (basically a serial terminal). It will take me a while to fully understand it, if I even can with reasonable effort, but I did find explicit references to UUID_NOTIFY being ffe1 (c10) and UUID_SERVICE being ffe0 (s3). Curious what the other UUIDs are for, and wondering if they might be something useful.
Don
Re: New to Evothings, First Question
I was successful in sending ASCII chars from the Evothings app to the Microduino-BT/HM-10 with the Arduino LED On/Off BLE example. I had to first change the code of index.html starting at line 92 so that it would connect specifically to my BLE device. Just FYI, the default name of the HM-10 is "HMSoft" but I changed that to "HMSoft531" to indicate this particular device has been flashed with the latest firmware, v5.31.
Next, I needed to edit arduinoble.js to write to the proper characteristic of the HM-10 (0xffe1), starting at line 97,
Lastly, I had to change the write command to send the specific value I wanted to send. Starting from line 66 of index.html,
I also figured out I could transmit multiple chars/bytes at once since the HM-10 can send up to 20 bytes at a time (per the BLE specification). I simply separated the bytes in the array by commas. For example to send the ASCII string 'fgh' I would send Uint8Array([102,103,104]).
I am now trying to set up bi-directional communication between the app and the peripheral. However, in the Arduino BLE example, specifically app.js, it is written based on the peripheral having separate characteristics for write and read, whereas the HM-10 seems to only have one for both (0xffe1 is the only characteristic of service 0xffe0 advertised). I will continue to work on that but, again, any hints would be most appreciated.
Thanks,
Don
Code: Select all
evothings.arduinoble.connect(
'HMSoft531', // Name of BLE shield. << was 'arduinoble'
function(device)
{
app.device = device;
app.showMessage('Connected! Touch buttons to turn LED on/off.');
},
function(errorCode)
{
app.showMessage('Connect error: ' + errorCode + '.');
});
Next, I needed to edit arduinoble.js to write to the proper characteristic of the HM-10 (0xffe1), starting at line 97,
Code: Select all
device.writeDataArray = function(uint8array)
{
device.writeCharacteristic(
'0000ffe1-0000-1000-8000-00805f9b34fb', // << was '713d0003-503e-4c75-ba94-3148f18d941e'
uint8array,
function()
{
console.log('writeCharacteristic success');
},
function(errorCode)
{
console.log('writeCharacteristic error: ' + errorCode);
});
};
Lastly, I had to change the write command to send the specific value I wanted to send. Starting from line 66 of index.html,
Code: Select all
app.ledOn = function()
{
app.device && app.device.writeDataArray(new Uint8Array([102])); // '102' is ASCII char 'f', value was '1'
}
I also figured out I could transmit multiple chars/bytes at once since the HM-10 can send up to 20 bytes at a time (per the BLE specification). I simply separated the bytes in the array by commas. For example to send the ASCII string 'fgh' I would send Uint8Array([102,103,104]).
I am now trying to set up bi-directional communication between the app and the peripheral. However, in the Arduino BLE example, specifically app.js, it is written based on the peripheral having separate characteristics for write and read, whereas the HM-10 seems to only have one for both (0xffe1 is the only characteristic of service 0xffe0 advertised). I will continue to work on that but, again, any hints would be most appreciated.
Thanks,
Don
Re: New to Evothings, First Question
Hi Don,
Thanks a lot for sharing your findings. I guess you could just test to use the single characteristic available for both reading and writing. Don't have personal experience from this particular case, but it would be straightforward to try. I don't know about setting up notifications on the characteristic and at the same time write to it. Perhaps that would work too, but I would start with the basic case of "normal" reading and writing. Did some googling for this, but did not find anything.
Best, Mikael
Thanks a lot for sharing your findings. I guess you could just test to use the single characteristic available for both reading and writing. Don't have personal experience from this particular case, but it would be straightforward to try. I don't know about setting up notifications on the characteristic and at the same time write to it. Perhaps that would work too, but I would start with the basic case of "normal" reading and writing. Did some googling for this, but did not find anything.
Best, Mikael
Return to “Questions and answers”
Who is online
Users browsing this forum: No registered users and 41 guests