Outils pour utilisateurs

Outils du site


esp8266:i2c-compas

Table des matières

Bouton wifi

Cela permet de fabriquer un objet genre bouton a tourner, potentiomètre qu'on pose sur une table.

Il retransmet en wifi sa position par rapport au nord, une boussole wifi…

Matériel

  1. esp8266 avec des GPIO utilisables genre GPIO 4 et 5 olimex ou 0,2 classique
  2. un module compas HMC6352
  3. 2 piles AA

Connecter le compas sda et scl sur les gipo 4 5

Codes

Coté module wifi esp8266

Le module est flashé avec nodemcu

hmc6352

--hmc6352

hmc6352 = {
     address = 0x21,
     hmc_reg = 0x41,
     
     init = function (self, sda, scl)
          self.bus = 0
          i2c.setup(self.bus, sda, scl, i2c.SLOW)
     end,

     read = function (self)
          i2c.start(self.bus)
          i2c.address(self.bus, self.address, i2c.TRANSMITTER)
          i2c.write(self.bus, self.hmc_reg)
          i2c.stop(self.bus)
          i2c.start(self.bus)
          i2c.address(self.bus, self.address , i2c.RECEIVER)
          c=i2c.read(self.bus, 2)
          i2c.stop(self.bus)
          return c
     end,

     bearing = function (self)
          local h, l 
          h, l = string.byte(self:read(), 1, 2)
          return ((bit.lshift(h, 8)) +l)/10
     end,
}

init.lua J'ai fixé l'IP de destination et le port 192.168.1.33 9009.. a changer dans le code

--init.lua
--lecture d'un compas hmc6352 i2c

require('hmc6352')

-- i2c-scanner trouve
-- Device found at address 0x21
-- Device is wired: SDA to GPIO0 - IO index 3
-- Device is wired: SCL to GPIO2 - IO index 4
-- olimex esp8266 mode-dev
-- Device found at address 0x21
-- Device is wired: SDA to GPIO5 - IO index 1
-- Device is wired: SCL to GPIO4 - IO index 2
-- sda, scl = 1, 2

-- ESP8266 classic
sda, scl = 4, 3
hmc6352:init(sda, scl)
    
wifi.setmode(wifi.STATION)
cfg = { ip="192.168.1.63", netmask="255.255.255.0", gatway="192.168.1.1"}
wifi.sta.setip(cfg)
wifi.sta.config("SNHACK","0123456789")
ip = wifi.sta.getip()
print(ip)
cu=net.createConnection(net.UDP)
cu:connect(9009,"192.168.1.33")
tmr.alarm(0,50, 1, function() cour=hmc6352:bearing()
cu:send(cour)
--print (cour)
end)
--cu:send("bout1=" .. cour ) end)
print ("En cours")

Coté ordi pour l'écoute

#!/usr/bin/python
import socket
UDP_IP = "192.168.1.33"
UDP_PORT = 9009

sock = socket.socket(socket.AF_INET, # Internet
                  socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
    data, addr = sock.recvfrom(1024) # buffer de 1024 bytes
    if not data: break
    print data
conn.close() # option
esp8266/i2c-compas.txt · Dernière modification : 2024/02/09 17:10 de 127.0.0.1