Skip to content
Snippets Groups Projects
Commit 367974c7 authored by Moritz Perschke's avatar Moritz Perschke
Browse files

receiving values on fipy works

parent e22864bb
No related branches found
No related tags found
5 merge requests!39Merge Develop into Main,!19development into master,!17Inital Host, initial Client,!3Merge Branch `develop` into `sensor_readout`,!1Espnow
......@@ -9,7 +9,17 @@ uint8_t BROADCAST_MAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_peer_info_t hostInfo;
Preferences preferences;
ESP32Time rtc;
void get_host_mac(uint8_t* destination){
preferences.begin("config", true);
if(preferences.isKey("host")){
preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
}
else{
memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
Serial.println("backup mac used");
}
preferences.end();
}
void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status){
// go to sleep
}
......@@ -54,60 +64,49 @@ esp_err_t espnow_setup(){
}
void Message::add_data(float value, int identifier){
if(data->amountData < NUM_SENSORS){
data->values[data->amountData] = value;
data->identifiers[data->amountData] = identifier;
data->amountData++;
if(data.amountData < NUM_SENSORS){
data.values[data.amountData] = value;
data.identifiers[data.amountData] = identifier;
data.amountData++;
}
}
esp_err_t Message::send(){
Serial.println("sending Message");
esp_err_t success;
success = esp_now_send(recipient, (uint8_t *) &data, sizeof(data));
if(success != ESP_OK){
if(!ram_cache_is_full()){
ram_cache_push(*data);
}
}
for(int i=0; i<data->amountData; i++){
Serial.println(data->values[i]);
success = esp_now_send(recipient, (uint8_t * ) &data , sizeof(data));
// if(success != ESP_OK){
// if(!ram_cache_is_full()){
// ram_cache_push(*data);
// }
// }
for(int i=0; i<data.amountData; i++){
Serial.println(data.values[i]);
}
Serial.println((String) "time sent: " + data->timestamp);
Serial.println((String) "time sent: " + data.timestamp);
Serial.println((String) "Send status: " + success);
Serial.println();
Serial.flush();
Serial.println("done");
return success;
}
Message :: Message(){
data = (data_struct*) malloc(sizeof(data_struct));
// data = (data_struct*) malloc(sizeof(data_struct));
// check for existing host mac address, use broadcast otherwise
get_host_mac(recipient);
data->amountData = 0;
data->timestamp = rtc.getMillis(); // I am assuming we are not sending data from Unix Epoch
data.amountData = 0;
data.timestamp = rtc.getMillis(); // I am assuming we are not sending data from Unix Epoch
}
Message :: Message(data_struct old_data){
memcpy(data, &old_data, sizeof(data));
memcpy(&data, &old_data, sizeof(data));
get_host_mac(recipient);
}
Message :: ~Message(){
free((void*) data);
}
// Message :: ~Message(){
// free((void*) data);
// }
void get_host_mac(uint8_t* destination){
preferences.begin("config", true);
if(preferences.isKey("host")){
preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
}
else{
memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
Serial.println("backup mac used");
}
preferences.end();
}
\ No newline at end of file
......@@ -2,6 +2,8 @@
#define _ESPNOW
#define NUM_SENSORS 10
//packing the struct without padding, makes reading it on the fipy easier
#pragma pack(1)
// having the data be a struct of basic types makes sending easier,
// otherwise we would have to serialize the data before sending
......@@ -23,12 +25,12 @@ class Message{
public:
Message();
Message(data_struct old_data);
~Message();
// ~Message();
void add_data(float value, int identifier);
esp_err_t send();
private:
data_struct *data;
data_struct data;
uint8_t recipient[6];
};
......
......@@ -24,11 +24,11 @@ void loop() {
new_data->send();
delete new_data;
if(!ram_cache_is_empty()){
data_struct old_data = ram_cache_pop();
Message* resend_message = new Message(old_data);
resend_message->send();
delete resend_message;
}
// if(!ram_cache_is_empty()){
// data_struct old_data = ram_cache_pop();
// Message* resend_message = new Message(old_data);
// resend_message->send();
// delete resend_message;
// }
delay(5000);
}
\ No newline at end of file
# main.py -- put your code here!
\ No newline at end of file
# main.py -- put your code here!
from network import WLAN
from network import ESPNOW
import binascii
import struct
from time import sleep
def bytes_to_data(msg):
# turn bytes from message into 22-tuple of integers(identifiers), floats(values), integer(amount) and long(timestamp)
data = struct.unpack("<10i10fil", bytes(msg))
amountData = data[20]
timestamp = data[21]
identifiers = data[0:amountData]
values = data[10: (10 + amountData)]
return {
"amountData" : amountData,
"timestamp" : timestamp,
"data" : dict(zip(identifiers, values))
}
def espnow_recv(result):
mac, peer, msg = result
data = bytes_to_data(msg)
try:
print(data["amountData"])
print(data["timestamp"])
print(data["data"])
except Exception as error:
print(error)
w = WLAN()
ESPNOW.init()
p = ESPNOW.add_peer("58cf79043c84")
ESPNOW.on_recv(espnow_recv)
while(True):
print("...")
sleep(5)
pass
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment