Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Master code. For the wemos that's bluetacked to Mancave window that sends out orders etc.
- //Master code. Similar to Sensor3 code,but not identical..
- /* C:\Users\Dell\Documents\Arduino\WorkingAugust22\SantosMaster0\SantosMaster0.ino. Wed Aug 10 13:57:59 NZST 2022.
- C:\Users\Dell\Documents\Arduino\WorkingAugust22\SantosMaster1\SantosMaster1.ino
- Wed Aug 10 16:49:19 NZST 2022 **
- Going to add more items to sruc including stac[10]Sat Aug 13 17:05:30 NZST 2022
- C:\Users\Dell\Documents\Arduino\WorkingAugust22\SantosMaster3\SantosMaster3.ino
- Changing C:\Users\Dell\Documents\Arduino\WorkingAugust22\SantosMaster5\SantosMaster5.ino
- ..so that the Master sends nothing back to sensor except orders(at this stage
- C:\Users\Dell\Documents\Arduino\WorkingAugust22\SantosMaster6\SantosMaster6.ino .. trying to fix some timing problems, viz response from master too quick, no time for slave-sensor to output Serial.print message. Try adding delay(100)
- //10
- */
- #include <ESP8266WiFi.h>
- #include <espnow.h>
- #include <stdio.h> //for sprintf
- uint8_t broadcastAddress[] = {0x18,0xFE,0x34,0xF9,0x2E,0x4A}; // Wemos 1
- // {0x98,0xF4,0xAB,0xBF,0xEC,0xCC}; //Mac address of Wemos2.
- //{0x18,0xFE,0x34,0xF9,0x2E,0x4A} ; //Mac address of Wemos1
- // Define variables to store Master Sensor readings to be sent
- float temperature;
- float humidity;
- unsigned long milliSecsA;
- uint8_t orders=0;
- uint8_t stack[10];
- uint8_t stackPtr;
- uint8_t bufferPtr;
- uint8_t bigBuffer[200];
- // Define variables to store incoming readings from Slave
- float incomingTemp;
- float incomingHum;
- unsigned long incomingMillisA;
- uint8_t incomingOrders;
- uint8_t incomingStac[10];
- uint8_t incomingStackPtr;
- uint8_t incomingBufferPtr;
- uint8_t incomingBigBuffer[200];
- // Updates Sensor readings every 10 seconds
- const long interval = 10000;
- unsigned long previousMillis = 0; // will store last time Sensor was updated
- char myBuf[80]; //for sprintf
- // Variable to store if sending data was successful
- String success;
- uint8_t incomingPacketArrived=0; //Flag for sensor packet-has-arrived
- //Structure example to send data
- //Must match the receiver structure
- typedef struct struct_message {
- float temp;
- float hum;
- unsigned long millisA;
- uint8_t ord;
- uint8_t stac[10];
- uint8_t stacPtr;
- uint8_t bufPtr;
- uint8_t bigBuf[200];
- } struct_message;
- // Create a struct_message called SensorReadings to hold readings FROM MASTER
- struct_message SensorReadings;
- // Create a struct_message to hold incoming FROM SENSOR readings
- struct_message incomingReadings;
- // Callback when data is sent
- void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
- Serial.print("Last Wemos 2 Packet Send Status: ");
- if (sendStatus == 0){
- Serial.println("Delivery success");
- }
- else{
- Serial.println("Delivery fail");
- }
- }
- // Callback when data is received
- void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
- //unsigned long currentMillis = millis();
- previousMillis = millis(); //Start timer
- memcpy(&incomingReadings, incomingData, sizeof(incomingReadings));
- Serial.print("\n\n\nBytes received: ");
- Serial.println(len);
- incomingTemp = incomingReadings.temp;
- incomingHum = incomingReadings.hum;
- incomingMillisA= incomingReadings.millisA;
- incomingOrders=incomingReadings.ord;
- for(int i =0;i<10;i++) incomingStac[i]=incomingReadings.stac[i];
- incomingStackPtr=incomingReadings.stacPtr;
- incomingBufferPtr=incomingReadings.bufPtr;
- for(int i =0;i<10;i++) incomingBigBuffer[i]=incomingReadings.bigBuf[i];
- //Now all the struct fields from have been put into Master variables ...
- //Like incomingxxx=incomingReadings.xxx, where xxx's are similar but not identical.
- incomingPacketArrived=1; //Flag for loop to find
- }
- void getReadings(){
- // Read the Master's "sensor data". Fake,right now.
- temperature = 992.3 ; //dht.readTemperature();
- // Read temperature as Fahrenheit (isFahrenheit = true)
- //float t = dht.readTemperature(true);
- if (isnan(temperature)){
- Serial.println("Failed to read from Master");
- temperature = 0.0;
- }
- humidity = 9945.6; //dht.readHumidity();
- if (isnan(humidity)){
- Serial.println("Failed to read from Master");
- humidity = 0.0;
- }
- }
- void printIncomingReadings(){
- // Display Readings in Serial Monitor. Nothing so far
- Serial.println("INCOMING READINGS");
- Serial.print("Temperature: ");
- Serial.print(incomingTemp);
- Serial.println(" ºC");
- Serial.print("Humidity: ");
- Serial.print(incomingHum);
- Serial.println(" %");
- Serial.print("Millies: ");
- Serial.println(incomingMillisA);
- Serial.print("IncomingOrders: ");
- Serial.println(incomingOrders);
- Serial.print("IncomingStackPtr: ");
- Serial.println(incomingStackPtr);
- for(int i =0;i<10;i++) Serial.print( incomingStac[i]);
- Serial.println(" <--incomingStac[]");
- for(int i =0;i<200;i++) Serial.print( incomingBigBuffer[i]);
- Serial.println(" <--incomingBigBuffer[]");
- /* To make copying easier
- float incomingTemp;
- float incomingHum;
- unsigned long incomingMillisA;
- uint8_t incomingOrders;
- uint8_t incomingStac[8];
- uint8_t incomingStackPtr;
- uint8_t incomingBufferPtr;
- uint8_t incomingBigBuffer[200]; */
- }
- void setup() {
- // Init Serial Monitor
- Serial.begin(115200);
- // Set device as a Wi-Fi Station
- WiFi.mode(WIFI_STA);
- WiFi.disconnect();
- // Init ESP-NOW
- if (esp_now_init() != 0) {
- Serial.println("Error initializing ESP-NOW");
- return;
- }
- // Set ESP-NOW Role
- esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
- // Once ESPNow is successfully Init, we will register for Send CB to
- // get the status of Trasnmitted packet
- esp_now_register_send_cb(OnDataSent);
- // Register peer
- esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
- // Register for a callback function that will be called when data is received
- esp_now_register_recv_cb(OnDataRecv);
- }
- void loop() {
- //unsigned long currentMillis = millis();
- if (incomingPacketArrived==1){
- //if (currentMillis - previousMillis >= interval) {
- // save the last time you updated the DHT values
- //previousMillis = currentMillis; //NB programmable delay.
- //Get Master's readings
- Serial.println("INCOMING packet-has-arrived.***\n\n\n");
- getReadings();
- orders=112; //replace later with orders via serial input.
- //Set values to send
- //SensorReadings.temp = temperature;
- //SensorReadings.hum = humidity;
- SensorReadings.ord = orders; //123; //orders++; Only thing Master changes.
- // Send message via ESP-NOW
- delay(100); //to give SEnsor time to Serial.print its message.
- esp_now_send(broadcastAddress, (uint8_t *) &SensorReadings, sizeof(SensorReadings));
- // Print incoming readings
- printIncomingReadings();
- incomingPacketArrived=0; //Push flag back down
- unsigned long currentMillis = millis();
- unsigned long duration = currentMillis-previousMillis;
- sprintf(myBuf, "Current millis :%lu Previous Millis: %lu Duration is: %lu",currentMillis,previousMillis, duration);
- puts(myBuf);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment