From 97c5aa834b041bf52b1b9f508d58d39b03f70712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Fri, 28 Apr 2023 21:17:02 +0200 Subject: inventar + upravljalnik --- prog/upravljalnik/naprava/.gitignore | 1 + prog/upravljalnik/naprava/platformio.ini | 22 +++++++++++ prog/upravljalnik/naprava/src/main.cpp | 68 ++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 prog/upravljalnik/naprava/.gitignore create mode 100644 prog/upravljalnik/naprava/platformio.ini create mode 100644 prog/upravljalnik/naprava/src/main.cpp (limited to 'prog/upravljalnik/naprava') diff --git a/prog/upravljalnik/naprava/.gitignore b/prog/upravljalnik/naprava/.gitignore new file mode 100644 index 0000000..03f4a3c --- /dev/null +++ b/prog/upravljalnik/naprava/.gitignore @@ -0,0 +1 @@ +.pio diff --git a/prog/upravljalnik/naprava/platformio.ini b/prog/upravljalnik/naprava/platformio.ini new file mode 100644 index 0000000..878054d --- /dev/null +++ b/prog/upravljalnik/naprava/platformio.ini @@ -0,0 +1,22 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:myboard] +platform = espressif8266 +board = nodemcuv2 +monitor_speed = 460800 +upload_speed = 460800 +build_flags = -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_PORT=Serial -DIP_FORWARD=1 -DMONITOR_SPEED=460800 +framework = arduino +board_build.filesystem = littlefs +board_build.ldscript = eagle.flash.4m2m.ld +src_filter = -<*> + +lib_deps = + /root/projects/ADS1115_WE diff --git a/prog/upravljalnik/naprava/src/main.cpp b/prog/upravljalnik/naprava/src/main.cpp new file mode 100644 index 0000000..78dd46a --- /dev/null +++ b/prog/upravljalnik/naprava/src/main.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +extern "C" { + #include "user_interface.h" +} +void incoming (unsigned char * buf, short unsigned int type) { + Serial.println(type); +} +uint8_t curchan[] = { 0 }; // we have sizeof curchan modules connected (at most four) +bool ready[sizeof curchan] = { false }; +IRAM_ATTR void rdy0 () { + ready[0] = true; +} +ADS1115_WE adc[] = { ADS1115_WE(0x49) }; // VDD +void (*rdyfuncs[])() = { rdy0 }; +int rdypins[] = { D7 }; +uint16_t adcval[sizeof curchan][4]; +bool upload = false; +void setup () { + Wire.begin(); + Wire.setClock(400000L); + Serial.begin(MONITOR_SPEED); + Serial.println("setupstart"); + for (unsigned i = 0; i < sizeof curchan; i++) { + Serial.println("nastavljam ADC " + String(i)); + if (!adc[i].init()) + Serial.println("ADS1115 " + String(i) + " not connected!"); + pinMode(rdypins[i], INPUT_PULLUP); + attachInterrupt(digitalPinToInterrupt(rdypins[i]), rdyfuncs[i], RISING); + adc[i].setVoltageRange_mV(ADS1115_RANGE_4096); + adc[i].setSingleChannel(curchan[i]); + adc[i].setConvRate(ADS1115_32_SPS); + adc[i].setMeasureMode(ADS1115_CONTINOUS); + adc[i].setAlertPinMode(ADS1115_ASSERT_AFTER_1); + adc[i].setAlertPinToConversionReady(); + adc[i].skip_delays = true; + } + Serial.println("nastavljam wifi"); + WiFi.setOutputPower(20.5); + wifi_set_opmode(STATION_MODE); + wifi_station_disconnect(); + wifi_promiscuous_enable(1); + wifi_set_promiscuous_rx_cb(incoming); + wifi_set_channel(13); + Serial.println("nastavil"); +} +uint8_t packet[] = { 0x08, 0x00, 0x00, 0x00, 'K', '@', '4', 'A', '.', 'S', 'I', ' ', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +void loop () { + for (unsigned i = 0; i < sizeof curchan; i++) { + if (!ready[i]) + continue; + uint16_t val = adc[i].getRawResult(); + if (val != adcval[i][curchan[i]]) { + adcval[i][curchan[i]] = val; + packet[12+i*8+curchan[i]*2] = val >> 8; + packet[12+i*8+curchan[i]*2+1] = val & 0xff; + upload = true; + } + adc[i].setSingleChannel((curchan[i] = (curchan[i]+1) % 4)); // XXX kaj če dobim ready signal še preden naprava dejansko zamenja naslov? za vsak slučaj ready=false nastavim tukaj spodaj, ampak vseeno zna biti kaj težav, še posebej glede na to, da izvorna knjižnica za ads1115 za chansel da nekaj delaya + ready[i] = false; + } + if (upload) { + upload = false; + wifi_send_pkt_freedom(packet, sizeof packet, 0); + } +} -- cgit v1.2.3