Skip to content
This repository was archived by the owner on Dec 29, 2023. It is now read-only.

Commit 55a56bd

Browse files
Leonid KabanovLeonid Kabanov
Leonid Kabanov
authored and
Leonid Kabanov
committed
Данный проект должен быть извлечён в качестве подмодуля в {$PROJECT_DIR}\components\
Если папки components в проекте нет, её следует создать в корне проекта. Использование этих обёрток приводит к увеличению объёма бинарника примерно на 20%, но сокращает сложность разработки на порядок. Для использования необходимо переименовать main.c в main.cpp, а так же обернуть функцию app_main(): extern "C"{ void app_main(){ // ваш код } }
0 parents  commit 55a56bd

File tree

223 files changed

+39545
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

223 files changed

+39545
-0
lines changed

AWS.cpp

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
/*
2+
* AWS.cpp
3+
*
4+
* Created on: May 31, 2017
5+
* Author: kolban
6+
*/
7+
#include "sdkconfig.h"
8+
#ifdef CONFIG_AWS_IOT_SDK
9+
#include <esp_log.h>
10+
#include "AWS.h"
11+
#include <string>
12+
13+
static char tag[] = "AWS";
14+
15+
AWS::AWS() {
16+
}
17+
18+
19+
AWS::~AWS() {
20+
}
21+
22+
/**
23+
* Convert an AWS IoT error code to a string representation.
24+
* @param err The error code to be mapped.
25+
* @return A string representation of the error code.
26+
*/
27+
/* static */ std::string AWS::errorToString(IoT_Error_t err) {
28+
switch(err) {
29+
case NETWORK_PHYSICAL_LAYER_CONNECTED :
30+
return "NETWORK_PHYSICAL_LAYER_CONNECTED";
31+
case NETWORK_MANUALLY_DISCONNECTED :
32+
return "NETWORK_MANUALLY_DISCONNECTED";
33+
case NETWORK_ATTEMPTING_RECONNECT:
34+
return "NETWORK_ATTEMPTING_RECONNECT";
35+
case NETWORK_RECONNECTED:
36+
return "NETWORK_RECONNECTED";
37+
case MQTT_NOTHING_TO_READ :
38+
return "MQTT_NOTHING_TO_READ";
39+
case MQTT_CONNACK_CONNECTION_ACCEPTED:
40+
return "MQTT_CONNACK_CONNECTION_ACCEPTED";
41+
case SUCCESS :
42+
return "SUCCESS";
43+
case FAILURE:
44+
return "FAILURE";
45+
case NULL_VALUE_ERROR :
46+
return "NULL_VALUE_ERROR";
47+
case TCP_CONNECTION_ERROR :
48+
return "TCP_CONNECTION_ERROR";
49+
case SSL_CONNECTION_ERROR:
50+
return "SSL_CONNECTION_ERROR";
51+
case TCP_SETUP_ERROR :
52+
return "TCP_SETUP_ERROR";
53+
case NETWORK_SSL_CONNECT_TIMEOUT_ERROR :
54+
return "NETWORK_SSL_CONNECT_TIMEOUT_ERROR";
55+
case NETWORK_SSL_WRITE_ERROR :
56+
return "NETWORK_SSL_WRITE_ERROR";
57+
case NETWORK_SSL_INIT_ERROR :
58+
return "NETWORK_SSL_INIT_ERROR";
59+
case NETWORK_SSL_CERT_ERROR :
60+
return "NETWORK_SSL_CERT_ERROR";
61+
case NETWORK_SSL_WRITE_TIMEOUT_ERROR :
62+
return "NETWORK_SSL_WRITE_TIMEOUT_ERROR";
63+
case NETWORK_SSL_READ_TIMEOUT_ERROR :
64+
return "NETWORK_SSL_READ_TIMEOUT_ERROR";
65+
case NETWORK_SSL_READ_ERROR :
66+
return "NETWORK_SSL_READ_ERROR";
67+
case NETWORK_DISCONNECTED_ERROR :
68+
return "NETWORK_DISCONNECTED_ERROR";
69+
case NETWORK_RECONNECT_TIMED_OUT_ERROR:
70+
return "NETWORK_RECONNECT_TIMED_OUT_ERROR";
71+
case NETWORK_ALREADY_CONNECTED_ERROR :
72+
return "NETWORK_ALREADY_CONNECTED_ERROR";
73+
case NETWORK_MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED :
74+
return "NETWORK_MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED";
75+
case NETWORK_SSL_UNKNOWN_ERROR :
76+
return "NETWORK_SSL_UNKNOWN_ERROR";
77+
case NETWORK_PHYSICAL_LAYER_DISCONNECTED :
78+
return "NETWORK_PHYSICAL_LAYER_DISCONNECTED";
79+
case NETWORK_X509_ROOT_CRT_PARSE_ERROR :
80+
return "NETWORK_X509_ROOT_CRT_PARSE_ERROR";
81+
case NETWORK_X509_DEVICE_CRT_PARSE_ERROR :
82+
return "NETWORK_X509_DEVICE_CRT_PARSE_ERROR";
83+
case NETWORK_PK_PRIVATE_KEY_PARSE_ERROR :
84+
return "NETWORK_PK_PRIVATE_KEY_PARSE_ERROR";
85+
case NETWORK_ERR_NET_SOCKET_FAILED :
86+
return "NETWORK_ERR_NET_SOCKET_FAILED";
87+
case NETWORK_ERR_NET_UNKNOWN_HOST :
88+
return "NETWORK_ERR_NET_UNKNOWN_HOST";
89+
case NETWORK_ERR_NET_CONNECT_FAILED :
90+
return "NETWORK_ERR_NET_CONNECT_FAILED";
91+
case NETWORK_SSL_NOTHING_TO_READ :
92+
return "NETWORK_SSL_NOTHING_TO_READ";
93+
case MQTT_CONNECTION_ERROR :
94+
return "MQTT_CONNECTION_ERROR";
95+
case MQTT_CONNECT_TIMEOUT_ERROR :
96+
return "MQTT_CONNECT_TIMEOUT_ERROR";
97+
case MQTT_REQUEST_TIMEOUT_ERROR:
98+
return "MQTT_REQUEST_TIMEOUT_ERROR";
99+
case MQTT_UNEXPECTED_CLIENT_STATE_ERROR :
100+
return "MQTT_UNEXPECTED_CLIENT_STATE_ERROR";
101+
case MQTT_CLIENT_NOT_IDLE_ERROR :
102+
return "MQTT_CLIENT_NOT_IDLE_ERROR";
103+
case MQTT_RX_MESSAGE_PACKET_TYPE_INVALID_ERROR :
104+
return "MQTT_RX_MESSAGE_PACKET_TYPE_INVALID_ERROR";
105+
case MQTT_RX_BUFFER_TOO_SHORT_ERROR :
106+
return "MQTT_RX_BUFFER_TOO_SHORT_ERROR";
107+
case MQTT_TX_BUFFER_TOO_SHORT_ERROR :
108+
return "MQTT_TX_BUFFER_TOO_SHORT_ERROR";
109+
case MQTT_MAX_SUBSCRIPTIONS_REACHED_ERROR :
110+
return "MQTT_MAX_SUBSCRIPTIONS_REACHED_ERROR";
111+
case MQTT_DECODE_REMAINING_LENGTH_ERROR :
112+
return "MQTT_DECODE_REMAINING_LENGTH_ERROR";
113+
case MQTT_CONNACK_UNKNOWN_ERROR :
114+
return "MQTT_CONNACK_UNKNOWN_ERROR";
115+
case MQTT_CONNACK_UNACCEPTABLE_PROTOCOL_VERSION_ERROR :
116+
return "MQTT_CONNACK_UNACCEPTABLE_PROTOCOL_VERSION_ERROR";
117+
case MQTT_CONNACK_IDENTIFIER_REJECTED_ERROR:
118+
return "MQTT_CONNACK_IDENTIFIER_REJECTED_ERROR";
119+
case MQTT_CONNACK_SERVER_UNAVAILABLE_ERROR :
120+
return "MQTT_CONNACK_SERVER_UNAVAILABLE_ERROR";
121+
case MQTT_CONNACK_BAD_USERDATA_ERROR:
122+
return "MQTT_CONNACK_BAD_USERDATA_ERROR";
123+
case MQTT_CONNACK_NOT_AUTHORIZED_ERROR :
124+
return "MQTT_CONNACK_NOT_AUTHORIZED_ERROR";
125+
case JSON_PARSE_ERROR :
126+
return "JSON_PARSE_ERROR";
127+
case SHADOW_WAIT_FOR_PUBLISH :
128+
return "SHADOW_WAIT_FOR_PUBLISH";
129+
case SHADOW_JSON_BUFFER_TRUNCATED :
130+
return "SHADOW_JSON_BUFFER_TRUNCATED";
131+
case SHADOW_JSON_ERROR :
132+
return "SHADOW_JSON_ERROR";
133+
case MUTEX_INIT_ERROR :
134+
return "MUTEX_INIT_ERROR";
135+
case MUTEX_LOCK_ERROR:
136+
return "MUTEX_LOCK_ERROR";
137+
case MUTEX_UNLOCK_ERROR :
138+
return "MUTEX_UNLOCK_ERROR";
139+
case MUTEX_DESTROY_ERROR :
140+
return "MUTEX_DESTROY_ERROR";
141+
default:
142+
return "Unknown error!";
143+
}
144+
} // AWS#errorToString
145+
146+
/**
147+
* @brief Connect to the AWS IoT service.
148+
* Connect to the AWT IoT service.
149+
* @param [in] The client id.
150+
* @return N/A.
151+
*/
152+
void AWS::connect(std::string clientId) {
153+
IoT_Client_Connect_Params connectParams = iotClientConnectParamsDefault;
154+
connectParams.keepAliveIntervalInSec = 10;
155+
connectParams.isCleanSession = true;
156+
connectParams.MQTTVersion = MQTT_3_1_1;
157+
connectParams.isWillMsgPresent = false;
158+
connectParams.pClientID = clientId.c_str();
159+
connectParams.clientIDLen = clientId.length();
160+
161+
IoT_Error_t err = ::aws_iot_mqtt_connect(&m_client, &connectParams);
162+
if (err != SUCCESS) {
163+
ESP_LOGD(tag, "aws_iot_mqtt_connect: error=%d", err);
164+
}
165+
} // connect
166+
167+
168+
/**
169+
* @brief Disconnect a previously formed connection.
170+
* Disconnect from the AWT IoT service.
171+
* @return N/A.
172+
*/
173+
void AWS::disconnect() {
174+
IoT_Error_t err = ::aws_iot_mqtt_disconnect(&m_client);
175+
if (err != SUCCESS) {
176+
ESP_LOGD(tag, "aws_iot_mqtt_disconnect: error=%d", err);
177+
}
178+
} // disconnect
179+
180+
181+
/**
182+
* @brief Initialize our connection.
183+
* @param [in] host The the host of the AWS IoT service.
184+
* @param [in] port The port number of the AWS IoT service.
185+
* @return N/A.
186+
*/
187+
void AWS::init(std::string host, uint16_t port) {
188+
IoT_Client_Init_Params initParams = iotClientInitParamsDefault;
189+
190+
initParams.pHostURL = (char *)host.c_str();
191+
initParams.port = port;
192+
initParams.pRootCALocation = nullptr;
193+
initParams.pDeviceCertLocation = nullptr;
194+
initParams.pDevicePrivateKeyLocation = nullptr;
195+
initParams.mqttCommandTimeout_ms = 20000;
196+
initParams.tlsHandshakeTimeout_ms = 5000;
197+
initParams.isSSLHostnameVerify = true;
198+
199+
IoT_Error_t err = ::aws_iot_mqtt_init(&m_client, &initParams);
200+
if (err != SUCCESS) {
201+
ESP_LOGD(tag, "aws_iot_mqtt_init: error=%d", err);
202+
}
203+
} // init
204+
205+
206+
/**
207+
* @brief Publish a message.
208+
* Publish a message on the given topic.
209+
*
210+
* @param [in] topic The topic against which we wish to publish.
211+
* @param [in] payload The payload of the message we wish to publish.
212+
* @param [in] qos The quality of service for the publish.
213+
* @return N/A.
214+
*/
215+
void AWS::publish(std::string topic, std::string payload, QoS qos) {
216+
IoT_Publish_Message_Params message;
217+
message.payload = (void *)payload.data();
218+
message.payloadLen = payload.length();
219+
message.qos = qos;
220+
message.isRetained = 0;
221+
IoT_Error_t err = ::aws_iot_mqtt_publish(&m_client, topic.c_str(), topic.length(), &message);
222+
if (err != SUCCESS) {
223+
ESP_LOGD(tag, "aws_iot_mqtt_publish: error=%d", err);
224+
}
225+
} // publish
226+
227+
228+
/**
229+
* @brief Subscribe to a topic.
230+
* Future publications on this topic will be delivered to us.
231+
* @param [in] topic The topic against which we wish to subscribe.
232+
* @return N/A.
233+
*/
234+
void AWS::subscribe(std::string topic) {
235+
pApplicationHandler_t iot_subscribe_callback_handler = nullptr;
236+
IoT_Error_t err = ::aws_iot_mqtt_subscribe(&m_client, topic.c_str(), topic.length(), QOS0, iot_subscribe_callback_handler, NULL);
237+
if (err != SUCCESS) {
238+
ESP_LOGD(tag, "aws_iot_mqtt_subscribe: error=%d", err);
239+
}
240+
} // subscribe
241+
242+
243+
/**
244+
* @brief Un-subscribe from a previous subscription.
245+
* Further publications on this topic will no longer be delivered to us.
246+
* @param [in] topic The topic to un-subscribe from.
247+
* @return N/A.
248+
*/
249+
void AWS::unsubscribe(std::string topic) {
250+
IoT_Error_t err = ::aws_iot_mqtt_unsubscribe(&m_client, topic.c_str(), topic.length());
251+
if (err != SUCCESS) {
252+
ESP_LOGD(tag, "aws_iot_mqtt_unsubscribe: error=%d", err);
253+
}
254+
} // unsubscribe
255+
#endif // CONFIG_AWS_IOT_SDK

AWS.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* AWS.h
3+
*
4+
* Created on: May 31, 2017
5+
* Author: kolban
6+
*/
7+
8+
#ifndef COMPONENTS_AWS_H_
9+
#define COMPONENTS_AWS_H_
10+
#include "sdkconfig.h"
11+
#ifdef CONFIG_AWS_IOT_SDK
12+
13+
#include <aws_iot_mqtt_client_interface.h>
14+
#include <aws_iot_mqtt_client.h>
15+
#include <string>
16+
17+
/**
18+
* @brief AWS IoT access.
19+
*/
20+
class AWS {
21+
public:
22+
AWS();
23+
virtual ~AWS();
24+
25+
void connect(std::string clientId);
26+
void disconnect();
27+
static std::string errorToString(IoT_Error_t err); // Convert an AWS IoT error code to a string representation.
28+
void init(std::string host=CONFIG_AWS_IOT_MQTT_HOST, uint16_t port=CONFIG_AWS_IOT_MQTT_PORT);
29+
void publish(std::string topic, std::string payload, QoS qos = QOS0);
30+
void subscribe(std::string topic);
31+
void unsubscribe(std::string topic);
32+
33+
private:
34+
AWS_IoT_Client m_client;
35+
};
36+
#endif // CONFIG_AWS_IOT_SDK
37+
#endif /* COMPONENTS_AWS_H_ */

Apa102.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Apa102.cpp
3+
*
4+
* Created on: Oct 22, 2017
5+
* Author: kolban
6+
*/
7+
8+
#include "Apa102.h"
9+
10+
Apa102::Apa102() {
11+
}
12+
13+
Apa102::~Apa102() {
14+
15+
}
16+
17+
18+
void Apa102::init() {
19+
mySPI.init();
20+
}
21+
22+
/**
23+
* @brief Show the pixels on an APA102 device.
24+
* The pixels that have been set are pushed to the APA102 devices.
25+
*/
26+
void Apa102::show() {
27+
// We follow the data sheet for the APA102. To signify a new stream of data
28+
// we send 32bits of 0 value. Following that are 4 bytes of color data. The
29+
// data is 0b111 nnnnn where `nnnnn` is the brightness of the pixels.
30+
// The following data is 8 bits for blue, 8 bits for green and 8 bits for red.
31+
32+
// Send APA102 start.
33+
mySPI.transferByte(0x0);
34+
mySPI.transferByte(0x0);
35+
mySPI.transferByte(0x0);
36+
mySPI.transferByte(0x0);
37+
38+
double brigthnessScale = getBrightness() / 100.0;
39+
// Loop over all the pixels in the pixels array to set the colors.
40+
for (uint16_t i = 0; i < m_pixelCount; i++) {
41+
mySPI.transferByte(0xff); // Maximum brightness
42+
mySPI.transferByte(m_pixels[i].blue * brigthnessScale);
43+
mySPI.transferByte(m_pixels[i].green * brigthnessScale);
44+
mySPI.transferByte(m_pixels[i].red * brigthnessScale);
45+
} // End loop over all the pixels.
46+
} // show

Apa102.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Apa102.h
3+
*
4+
* Created on: Oct 22, 2017
5+
* Author: kolban
6+
*/
7+
8+
#ifndef COMPONENTS_CPP_UTILS_APA102_H_
9+
#define COMPONENTS_CPP_UTILS_APA102_H_
10+
11+
#include "SmartLED.h"
12+
#include "SPI.h"
13+
14+
class Apa102: public SmartLED {
15+
public:
16+
Apa102();
17+
virtual ~Apa102();
18+
void init();
19+
void show();
20+
private:
21+
SPI mySPI;
22+
};
23+
24+
#endif /* COMPONENTS_CPP_UTILS_APA102_H_ */

0 commit comments

Comments
 (0)