Aktywne Wpisy

szklarskaporeba +624
#korposwiat #pracbaza #big4 Młode roczniki są bardzo śmieszne. Dzisiaj '99 podszedl na open space do managera i powiedział ze albo pierwsze dwa tygodnia listopada będzie mieć wolne a potem home working do końca roku albo jutro rzuca wypowiedzenie xD. Pulsujących zawołam jutro z rozwinięciem sytuacji.

timeofthe +28
#famemma fakty są takie że z pewnością wykopki pisały gorsze rzeczy na 6 obcy czy asku niż połowa oskarżonych na Pandora gate xd obrońcy moralności oglądający patologię. Dziwne że taki wardega nie jest ciśnięty za boobs mana
![[AMA] Paweł Fajdek, pięciokrotny mistrz świata w rzucie młotem](https://wykop.pl/cdn/c0834752/cb6c48282d3c4c70261f8afb5f9fa77e36d122724502ac5937f39f268d049939,q70.jpg)




używam #esp8266 na którym stoi serwer TCP, przez sieć wysyłam do niego dane binarne w paczkach po 5 bajtów, kiedy wysyłam dane typu:
{26,147,63,255,98}
wszystko jest ok, ESP ładnie przesyła przez Serial dane do #arduino i wszyscy są zadowoleni.
Problem pojawia się, kiedy w danych pojawia się NULL, NL, CR i być może coś jeszcze (wszystkiego nie sprawdziłem), czyli np:
{63,0,157,242,111}
albo
{85,6,157,13,255}
Takie dane powodują, że ESP nie chce ich wysyłać po Serialu. Pół biedy jeżeli pojawi się ta druga kombinacja, bo dojdą wszystkie bajty oprócz feralnej 13, w przypadku pierwszej kombinacji wszystko za zerem jest ucinane (zero też), w końcu to null.
ESP ma wgrany Nodemcu, kod serwera wygląda tak:
sv:listen(1337,function(c)c:on("receive", function(c, pl)
print(pl)
end)
end)
Na pewno problem jest po stronie ESP, Arduino kiedy dostaje binarne 0 to ładnie je wypluwa.
Do tego ESP dorzuca do każdej linii 13 i 10 (NL/CR), wie ktoś może jak wyprintować dane bez znaków końca linii? (io.write nic nie daje ( ͡° ͜ʖ ͡°))
#elektronikadiy #elektronika
Coś jak "\n".
Co w przypadku wysłania danych: {0,0,0,0,0} - taki przypadek też muszę rozważyć.
Spróbuję na innym fw w esp dziś, moze to z nodemcu jest coś nie tak...
Slabe rozwiazanie, nie lubie takiego kombinowania, ale jak nie bedzie sie dalo inaczej...
Poprzedzenie dodatkowym bajtem nie zadziała, bo zero i tak wycina mi wszystko za nim :c
Rozwiązanie może i słabe, ale funkcjonuje od dziesiątek lat.
A po escape char możesz wysłać co innego przecież, chodzi tylko o to, żeby potem to zinterpretować jako zero czy co ram chcesz.
Przykład:
- ryzykowne wartości to 0 i 13.
- escape char to 50
I teraz przykładowo, zastępujesz je tak (zakładając, że 1, 2 i 3 są "bezpieczne"):
0 => 50 + 1
13
0 => 50 + 1
oznacza, że jak napotkasz "0" to wysyłasz "50" oraz "1" :)
Natomiast:
50 + 1 => 0
oznacza, że jak napotkasz (przy odbiorze) "50" to pomijasz i czekasz na kolejny, jeżeli będzie to "1" to wpisujesz gdzie trzeba "0".
5,20,0,100,100
Wysyłam
5,20,50,1,100,100
Ok
A jak mam np do wysłania:
60,50,2,100,150
To skąd będę wiedział, ze kombinacja 50 i 2 to nie jest escape char? Po liczbie bajtów?
A co przy takich danych do wysłania :
100,50,1,0,100
Wyślę
100,50,1,50,1,100
Skąd mam wiedzieć, które to escape char? :p
0 => 50 + 1
13 => 50 + 2
50 => 50 + 3
Czyli jak chcesz wysłać ciąg
60,50,2,100,150
to wysyłasz:
60,50,3,2,100,150
Jak chcesz wysłać:
100,50,1,0,100
To wysyłasz:
100,50,3,1,50,1,100
Sam sobie wymyślasz czym jest escape char. Jako przykład podałem 50 :)
Zamiast:
Ma być oczywiscie:
Reflash na firmware AT rozwiązał problem, dostaję piekne zera i inne bajty :D