Go Down

Topic: Wemos Mega 2650 avec Wifi intégré (Read 650 times) previous topic - next topic

supercc

Ok, c'est beaucoup plus clair ;-)

Quote
En tout cas je suis pas prêt d'arrêter de passer l'aspirateur moi même :D
;-)

Perso je n'ai aucune expérience des commandes AT, je préfère faire les miennes (et donc flasher mais encore une fois je ne connais pas du tout ta carte, si cela ne fonctionne pas je ne sais pas par exemple restaurer le "firmware" d'origine).

Charly26

J'ai flashé 100 fois l'esp avec le firmware d'origine ou un script c'est pas compliqué.

Sa te dit de continuer cette conversation en privé ? Parce que j'ai quelques questions qui n'ont pas vraiment à voir avec le sujet du post :)

En tout cas merci

supercc


68tjs

Merci de partager votre travail dans "Réalisation et Projets finis" quand il sera terminé

Charly26

#19
Aug 11, 2019, 09:24 pm Last Edit: Aug 11, 2019, 09:48 pm by Charly26
Merci de partager votre travail dans "Réalisation et Projets finis" quand il sera terminé
D'accord pas de problème, si j'arrive à faire un truc fonctionnel, je partagerai tout, avec des photos du robot tout  tout !!


Si non supercc j'ai quelques question !!!

J'ai trouvé ce petit script en python
Code: [Select]

#!/usr/bin/env python

import socket


TCP_IP = '192.168.0.50'
TCP_PORT = 65432
BUFFER_SIZE = 20  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print "received data:", data
    conn.send(data)  # echo
conn.close()



et pour le script arduino :

Code: [Select]

/*  Connects to the home WiFi network
 *  Asks some network parameters
 *  Sends and receives message from the server in every 2 seconds
 *  Communicates: wifi_server_01.ino
 */
#include <SPI.h>
#include <ESP8266WiFi.h>
 
char ssid[] = "SFR-6c00";           // SSID of your home WiFi
char pass[] = "Charly0406!";            // password of your home WiFi
 
IPAddress server(192,168,0,50);       // the fix IP address of the server
WiFiClient client;
 
void setup() {
  Serial.begin(115200);               // only for debug
  WiFi.begin(ssid, pass);             // connects to the WiFi router
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  if (WiFi.status() == WL_CONNECTED)
  {
    Serial.println("0:1"); // 0 ==  wifi
  }
  if (!client.connect(server, 65432)) {
    Serial.println("1:0");
    delay(5000);
    return;
  }
  else
  {
    Serial.println("1:1"); // 1 = serveur TCP
  }
 // Connection to the server

/*  Serial.println("Connected to wifi");
  Serial.print("Status: "); Serial.println(WiFi.status());    // Network parameters
  Serial.print("IP: ");     Serial.println(WiFi.localIP());
  Serial.print("Subnet: "); Serial.println(WiFi.subnetMask());
  Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP());
  Serial.print("SSID: "); Serial.println(WiFi.SSID());
  Serial.print("Signal: "); Serial.println(WiFi.RSSI());*/
}
 
void loop () {
  while (client.available() != 0) {
    char c = client.read();
    Serial.print(c);
  }
  while (Serial.available() != 0)
  {
    char c = Serial.read();
    client.print(c);
  }
  // do something...
  client.flush();
  delay(1000);                  // client will trigger the communication after two seconds
}


sa fonctionne, j'envoi un message via le moniteur série par exemple :

- 123

et côté python je reçois ceci :
received data: 1
received data: 23


j'envoi bien la chaîne "123" sur la même ligne, je ne comprend pas d'où ça peut venir...
je ne comprends pas du tout pourquoi




EDIT : je pense avoir compris, en gros la boucle while se termine  car il n'y a plus de donnée disponible sur le Serial, sauf que tout n'est pas arrivé, en gros la boucle tourne trop vite. Donc je vais plutôt déclencher l'envoi au serveur TCP lorsque j'ai mis un caractère de terminaison, comme ";"


supercc

Le plus simple est de travailler avec des lignes terminée par un \n. Cela se configure dans la console. Ensuite tu peux lire une ligne entière avec la fonction readBytesUntil('\n', line, len); Je te laisse lire la doc, c'est une fonction bien pratique qui marche sur tous les flux (Stream) donc avec Serial et client (classe WifiClient).

Sinon tu viens de nous présenter un serveur Python "perroquet", qui retourne à l'émetteur ce que l'émetteur lui a envoyé.

Le programme Arduino est le code d'un client  qui se connecte au serveur puis qui surveille à la fois ce qui vient du port série et ce qui vient du serveur. Dès qu'un caractère arrive d'un coté (Serial, client) il l'écrit de l'autre coté.

Essaye de travailler avec des lignes, la suite sera plus simple.

Charly26

Merci pour l'astuce de readUntil
Je vais tester ça demain soir.

Oui pour l'instant c'est un perroquet mais je veux bien piger comment fonctionne les transmission tcp pour pas commencer à formater mes données d'une manière puis de devoir tout recommencer parce que j'ai loupé un truc!
Merci encore

Si j'avais plus de temps j'aurais bien voulu t'aider à travailler sur ta librairie, elle a l'air vraiment bien...
Mais à part le week-end dernier ou j'ai pu bricoler un peu, pour l'instant si j'ai à peine une heure par semaine pour me pencher sur tout ça...

supercc

Re,

le fait que tu ai choisi de mettre le serveur du coté raspberry et le client du coté arduino implique que c'est l'arduino qui aura l'initiaive de se connecter au raspberry. Je fais perso dans l'autre sens : le serveur du coté arduino et le client coté raspberry. Du coup c'est la raspberry qui décide quand se connecter. Pour moi mes arduinos rendent des services à ma raspberry qui les surveille et les contrôle. C'est la raspberry qui même la danse ;-).

Je vais faire des tests de mon coté et ferai une synthèse. 

Charly26

Salut, merci pour ta réponse.
Je ne pensais pas que le côté où était le serveur avait une importance ?
Vue que la transmission est en duplex ?

Je suis parti comme ça parce que c'est le robot qui est commandé par le rpi.
Et puis le Wi-Fi ne sera allumé que quand le robot va fonctionner.
Autrement tout est en filaire chez moi.
Alors comme ça le rpi qui est connecté sur le switch Wi-Fi.
Le WiFi va s'allumer sur une plage horaire. Et le robot va fonctionner pendant cette plage.

Du coup le serveur côté rpi est en écoute jusqu'au moment ou c'est l'heure de fonctionner ?
Qu'en penses tu ?

supercc

Je ne remets pas en cause tes choix client/serveur, je ne vois pas ou cela serait bloquant.

J'ai bien compris que c'était la raspberry qui envoyait des ordres au robot (marche, tourne, capteurs (retourne la valeur des capteurs embarqués), aspire, fait la vaisselle, ...). Mais commander (protocole maître/esclave par exemple) et initier une connexion (client/serveur) sont 2 choses différentes. Tous les cas sont envisageables. Il faut juste que ce choix ne soit pas bloquant pour la suite. Pour l'instant je ne vois pas ou ton choix bloquerai ;-).

Après pour la plage horaire je ne suis pas convaincu que cela également dans le choix client/serveur. Si tu ne veux  pas activer le wifi pendant une plage horaire alors il va falloir faire "tomber" les interfaces wifi du point d'accès, du robot et de la rpi. A ce stage il faut que le robot et la rpi aient une notion d'heure de réveille commune et qu'ils attendent cette heure pour réveiller l'interface wifi et établir une connexion mais peut importe dans quel sens.

Toutes les options sont ouvertes. Choisis comme tu veux, et puis il ne sera pas bien compliquer d'inverser à posteriori si ton choix n'est pas le bon ;-)

L'étape suivante est de définir le protocole qui transitera par la connexion TCP : maître/esclave ? (non, ce n'est pas une invitation coquine ;-))


maurped4984

bonjour,

j'ai moi aussi un soucis pour téléverser sur cette carte.
J'ai changer de mode en me référent à cette page
mais impossible de faire fonctionner la carte.

si j'utilise le mode CH340 connect to ATmega2560 (upload sketch)

la carte ne se connecte jamais :
Quote
esptool.py v2.6
2.6
esptool.py v2.6
Serial port COM3
Connecting........_____....._____....._____....._____....._____....._____.....____Traceback (most recent call last):
et avec le mode CH340 connect to ESP8266 (upload sketch)
même en appuyant sur le bouton reset ça ne fait rien.
Quote
esptool.py v2.6
2.6
esptool.py v2.6
Serial port COM3
Connecting........_
Chip is ESP8266EX
Features: WiFi
MAC: dc:4f:22:60:bb:8b
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0240
Compressed 267536 bytes to 194909...

Writing at 0x00000000... (8 %)
Writing at 0x00004000... (16 %)
Writing at 0x00008000... (25 %)
Writing at 0x0000c000... (33 %)
Writing at 0x00010000... (41 %)
Writing at 0x00014000... (50 %)
Writing at 0x00018000... (58 %)
Writing at 0x0001c000... (66 %)
Writing at 0x00020000... (75 %)
Writing at 0x00024000... (83 %)
Writing at 0x00028000... (91 %)
Writing at 0x0002c000... (100 %)
Wrote 267536 bytes (194909 compressed) at 0x00000000 in 17.2 seconds (effective 124.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
merci pour votre aide.

supercc

Bonsoir maurped4984,

je n'ai pas ta carte mais quand j'ai le dernier message que tu donnes sur mon esp cela signifie que le téléchargement s'est bien passé. Qu'est ce que tu télécharges sur l'ESP ?

Go Up