Zbyšek Voda
Vytvořené odpovědi
-
AutorPříspěvky
-
Zbyšek VodaSprávce
Dobrý den, jak se chyba projevuje?
Píše něco IDE? Nějakou chybovou hlášku?Zbyšek VodaSprávceJe to nějaké podivné. Když jsem program znovu zkompiloval, tak vyžaduje signaturu
int wifi_send_pkt_freedom(uint8 *buf, int len,bool sys_seq) (stejná je i v dokumentaci).Tedy buf má být opravdu jenom jednoduché pole. Tak jste to asi i na začátku měl, ale házelo to ten podivný error.
Nakonec se mi povedlo přes chybu dostat zápisem
if (wifi_send_pkt_freedom(packet, packetSize, 0) == -1) {
tak jste to ale asi na začátku měl, tak nevím.Btw. v kódu chybí funkce setup a loop, což se překladači taky nebude líbit.
Takto mi to hlásí jen chyby neexistující loop a setup funkce. https://codepaste.net/us7qgo.
Zbyšek VodaSprávceTak zkuste ještě wifi_send_pkt_freedom((uint8_t**)&packet, packetSize, 0)
Zbyšek VodaSprávcePoužíváte funkci int wifi_send_pkt_freedom(uint8**, int, bool);
Tato funkce má první parametr ukazatel na ukazatel na uint8. Popřípadě se dá také interpretovat jako pole ukazatelů na hodnoty typu uint8, nebo ukazatel na pole (což asi je případ, který potřebujete).Vy ale této funkci předáváte jenom pole, ale ne ukazatel na pole.
Řekněme, že máte něco jako:byte data[] = {1, 2, 3, 4, ...}; wifi_send_pkt_freedom(data, x, y);
Místo data zkuste zapsat &data, tedy:
wifi_send_pkt_freedom(&data, x, y);
Znak ampersand (&) značí, že chcete získat adresu dané proměnné. Ukazatele jsou vlastně adresy.
Většinou stačí přeložit hlášku:
cannot convert ‘uint8_t* {aka unsigned char*}’ to ‘uint8** {aka unsigned char**}’ for argument ‘1’ to ‘int wifi_send_pkt_freedom(uint8**, int, bool)’
můžete číst jako
Nejde převést uint8_t* na uint8** v prvním argumentu funkce wifi_send_pkt_freedom(uint8**, int, bool)
uint8_t* = ukazatel na typ uint8_t / pole uint8
uint8_t** = ukazatel na ukazatel na uint8_t / pole ukazatelů na uint8_t / ukazatel na pole uint8_tPokud to nepůjde, pošlete sem kód 🙂
Zbyšek VodaSprávceNa úvodní stránce je formulář, kam dáte email a přijde vám kniha.
Zbyšek VodaSprávceV tom výpisu IDE žádnou chybu nehlásí. Podle čeho soudíte, že program nefunguje?
Když nahrajete blikání LEDkou, tak bliká?
Zbyšek VodaSprávcePěknou přednášku o Arduino bootloaderu a jeho modifikacích měl Petr Stehlík na posledním Install Festu – https://www.youtube.com/watch?v=6_1VQvVuFf8&feature=youtu.be&list=PLub6xBWO8gV_t_p-5-J_qU20fkkDtsLjB. Třeba byste se mohl nechat inspirovat 🙂
Zbyšek VodaSprávceDobrý den, Honzo,
problémů může být více, musíte poskytnout víc informací.
– jaké webové IDE používáte?
– jakou desku máte (nejlépe s odkazem, odkud jste ji koupil)
– hlásí editor při nahrávání nějakou chybu?Zbyšek VodaSprávceV C++ může středník vystupovat i jako prázdný příkaz, takže if (C >= 4); vlastně znamená – když C je větší nebo rovno 4, udělej nic.
{ } označují blok kódu, takže to programu nijak nevadí, ale poté následuje else, které přímo před sebou musí mít if.
Zbyšek VodaSprávceMělo by být možné sehnat knihovnu, která umí posílat přímo SQL dotazy do databáze. Viz například http://drcharlesbell.blogspot.cz/2013/04/introducing-mysql-connectorarduino_6.html.
Zbyšek VodaSprávceTaké jich mám pár doma a snad všechny v sobě AT firmware měly. Spíše byl problém s rychlostí komunikace. Měl jsem za to, že je tam AT vždy, ale máte asi pravdu, že někdy je Číňan nepředvídatelný.
Zbyšek VodaSprávceAno, potom stačí z Arduino programu posílat do ESP tyto AT příkazy přes Serial.println(„“); 🙂
Zbyšek VodaSprávceKdyž si necháte to zapojení, které zmiňujete v prvním postu:
ESP8266 –> Arduino Mega ADK
TX –> RX1
RX –> TX1
3V3 –> 3.3V (V Arduinu)
EN –> 3.3V (V Arduinu)
GND –> GND
GPIO0 –> GND,tak si pak do loop() dejte
while(Serial.available()) Serial1.write(Serial.read());
while(Serial1.available() Serial.write(Serial1.read());Toto by mělo přeposílat mezi sériovými porty sdílenými s PC a porty RX1 a TX1. Toto mám ozkoušené (dokonce i na ADK) a dá se tak ESP ovládat.
Ty errory, co vám to píše, jsou způsobené tím, že se nahrávací software nedokáže „zkontaktovat“ s EPS8266. Asi za to může to, co psal Aleš.
Zbyšek VodaSprávcePokud vám jde jen o to, abyste přes ESP připojil Arduino k WiFi, tak je ESP z výroby vybaveno firmware, který přijímá přes sériovou linku AT příkazy, přes které jej lze ovládat. Viz http://www.pridopia.co.uk/pi-doc/ESP8266ATCommandsSet.pdf.
Pak není nutné nijak měnit firmware ESP. Na druhou stranu jsou AT příkazy trochu neohrabané. Existují knihovny, které pracují nad AT příkazy, takže vám ulehčí práci při ovládání ESP – viz například https://github.com/itead/ITEADLIB_Arduino_WeeESP8266.
Zbyšek VodaSprávceDobrý den, teoreticky by to možné bylo. To, čeho chcete dosáhnout, je použití sériového převodníku Ardina pro naprogramování ESP. Určitě tedy musíte mít připojené ESP na piny RX0 a TX0 (ty jsou pro sériovou linku z PC).
Pak je tam ale další problém. Arduino vám bude do programování „kecat“, protože se i ono bude snažit komunikovat přes sériovou linku. Toto se řešilo tuším rezistorem mezi RST a GND u Arduina, ale bohužel se mi teď nedaří najít podrobnosti. Rezistor by měl dočasně vyřadit Atmegu na Arduinu z provozu, aby se nemíchalo do sériovky.
Asi bych vám doporučil pořídit si převodník USB-Serial. Ušetří vám to spoustu starostí 🙂
-
AutorPříspěvky