Merge branch 'master' into ci/improve_requirements · espressif/arduino-esp32@3e3fb95 (original) (raw)

``

1

`+

// Copyright 2024 Espressif Systems (Shanghai) PTE LTD

`

``

2

`+

//

`

``

3

`+

// Licensed under the Apache License, Version 2.0 (the "License");

`

``

4

`+

// you may not use this file except in compliance with the License.

`

``

5

`+

// You may obtain a copy of the License at

`

``

6

`+

//

`

``

7

`+

// http://www.apache.org/licenses/LICENSE-2.0

`

``

8

`+

//

`

``

9

`+

// Unless required by applicable law or agreed to in writing, software

`

``

10

`+

// distributed under the License is distributed on an "AS IS" BASIS,

`

``

11

`+

// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

`

``

12

`+

// See the License for the specific language governing permissions and

`

``

13

`+

// limitations under the License.

`

``

14

+

``

15

`+

/**

`

``

16

`+

`

``

17

`+

`

``

18

`+

`

``

19

`+

`

``

20

`+

`

``

21

`+

`

``

22

`+

`

``

23

`+

`

``

24

`+

`

``

25

`+

`

``

26

`+

`

``

27

`+

*/

`

``

28

+

``

29

`+

#ifndef ZIGBEE_MODE_ED

`

``

30

`+

#error "Zigbee coordinator mode is not selected in Tools->Zigbee mode"

`

``

31

`+

#endif

`

``

32

+

``

33

`+

#include "Zigbee.h"

`

``

34

+

``

35

`+

#define BUTTON_PIN 9 //Boot button for C6/H2

`

``

36

`+

#define TEMP_SENSOR_ENDPOINT_NUMBER 10

`

``

37

+

``

38

`+

#define uS_TO_S_FACTOR 1000000ULL /* Conversion factor for micro seconds to seconds */

`

``

39

`+

#define TIME_TO_SLEEP 55 /* Sleep for 55s will + 5s delay for establishing connection => data reported every 1 minute */

`

``

40

+

``

41

`+

ZigbeeTempSensor zbTempSensor = ZigbeeTempSensor(TEMP_SENSOR_ENDPOINT_NUMBER);

`

``

42

+

``

43

`+

/************************ Temp sensor *****************************/

`

``

44

`+

void meausureAndSleep() {

`

``

45

`+

// Measure temperature sensor value

`

``

46

`+

float temperature = temperatureRead();

`

``

47

+

``

48

`+

// Use temparture value as humidity value to demonstrate both temperature and humidity

`

``

49

`+

float humidity = temperature;

`

``

50

+

``

51

`+

// Update temperature and humidity values in Temperature sensor EP

`

``

52

`+

zbTempSensor.setTemperature(temperature);

`

``

53

`+

zbTempSensor.setHumidity(humidity);

`

``

54

+

``

55

`+

// Report temperature and humidity values

`

``

56

`+

zbTempSensor.reportTemperature();

`

``

57

`+

zbTempSensor.reportHumidity();

`

``

58

+

``

59

`+

log_d("Temperature: %.2f°C, Humidity: %.2f%", temperature, humidity);

`

``

60

+

``

61

`+

// Put device to deep sleep

`

``

62

`+

esp_deep_sleep_start();

`

``

63

`+

}

`

``

64

+

``

65

`+

/********************* Arduino functions **************************/

`

``

66

`+

void setup() {

`

``

67

`+

// Init button switch

`

``

68

`+

pinMode(BUTTON_PIN, INPUT_PULLUP);

`

``

69

+

``

70

`+

// Configure the wake up source and set to wake up every 5 seconds

`

``

71

`+

esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);

`

``

72

+

``

73

`+

// Optional: set Zigbee device name and model

`

``

74

`+

zbTempSensor.setManufacturerAndModel("Espressif", "SleepyZigbeeTempSensorTest");

`

``

75

+

``

76

`+

// Set minimum and maximum temperature measurement value (10-50°C is default range for chip temperature measurement)

`

``

77

`+

zbTempSensor.setMinMaxValue(10, 50);

`

``

78

+

``

79

`+

// Set tolerance for temperature measurement in °C (lowest possible value is 0.01°C)

`

``

80

`+

zbTempSensor.setTolerance(1);

`

``

81

+

``

82

`+

// Set power source to battery and set battery percentage to measured value (now 100% for demonstration)

`

``

83

`+

// The value can be also updated by calling zbTempSensor.setBatteryPercentage(percentage) anytime

`

``

84

`+

zbTempSensor.setPowerSource(ZB_POWER_SOURCE_BATTERY, 100);

`

``

85

+

``

86

`+

// Add humidity cluster to the temperature sensor device with min, max and tolerance values

`

``

87

`+

zbTempSensor.addHumiditySensor(0, 100, 1);

`

``

88

+

``

89

`+

// Add endpoint to Zigbee Core

`

``

90

`+

Zigbee.addEndpoint(&zbTempSensor);

`

``

91

+

``

92

`+

// Create a custom Zigbee configuration for End Device with keep alive 10s to avoid interference with reporting data

`

``

93

`+

esp_zb_cfg_t zigbeeConfig = ZIGBEE_DEFAULT_ED_CONFIG();

`

``

94

`+

zigbeeConfig.nwk_cfg.zed_cfg.keep_alive = 10000;

`

``

95

+

``

96

`+

// When all EPs are registered, start Zigbee in End Device mode

`

``

97

`+

Zigbee.begin(&zigbeeConfig, false);

`

``

98

+

``

99

`+

// Wait for Zigbee to start

`

``

100

`+

while (!Zigbee.isStarted()) {

`

``

101

`+

delay(100);

`

``

102

`+

}

`

``

103

+

``

104

`+

// Delay 5s to allow establishing connection with coordinator, needed for sleepy devices

`

``

105

`+

delay(5000);

`

``

106

`+

}

`

``

107

+

``

108

`+

void loop() {

`

``

109

`+

// Checking button for factory reset

`

``

110

`+

if (digitalRead(BUTTON_PIN) == LOW) { // Push button pressed

`

``

111

`+

// Key debounce handling

`

``

112

`+

delay(100);

`

``

113

`+

int startTime = millis();

`

``

114

`+

while (digitalRead(BUTTON_PIN) == LOW) {

`

``

115

`+

delay(50);

`

``

116

`+

if ((millis() - startTime) > 3000) {

`

``

117

`+

// If key pressed for more than 3secs, factory reset Zigbee and reboot

`

``

118

`+

Zigbee.factoryReset();

`

``

119

`+

}

`

``

120

`+

}

`

``

121

`+

}

`

``

122

+

``

123

`+

// Call the function to measure temperature and put the device to sleep

`

``

124

`+

meausureAndSleep();

`

``

125

`+

}

`