BrewManiacEx 0.3

Disclaimer:

There are more and more functions, but I can’t test all functions because I don’t have all the hardware setup. Neither can they be tested in one single brew. Therefore, please verify before put it into real use.

What’s new

  • Post Boil Hop(HopStand)
  • Customized audio
  • Multi-button in Web interface
  • New setting options
    • button feedback, buzz on button pressed, or not
    • pump priming cycle, on time, off time.
  • Iodine test.
    • There are two options after Iodine Test. Go to Mash Out or Extend the mashing rest.
  • Export/import settings in web interface
  • Dual heater support by compile option. config.h@39
    #define SecondaryHeaterSupport true

Others

  • Sparge heater is no longer  by default supported.
  • revise setting temperature of web interface. Correct setting temperature will be displayed in manual mode.
  • code revision.

Known issues:

  • The sound doesn’t paly on mobile Safari.
  • If the audio file is larger than 120k, it might not work.
  • Sometimes, Chrome don’t play the audio unless reloading the page.

Post Boil Hop(HopStand)

Check this post.


Customized audio

Currently, it works on Safari and Chrome, not tested on other platform. It doesn’t work on mobile Safari of iOS because it doesn’t allow downloading and playing audio without users’ action.

Two files are involve: sounds.json and the audio file. All segments of sound is put in a audio file, preferred to m4a(AAC) format, and specified by the sounds.json file.

sounds.json should be put in the root of the file system of ESP8266. If it is missing or in wrong format, all the sound effect will be replaced by simple buzzing.

The format of sounds.json is like this:

{"src":"sounds.m4a",
"seg":{
"open":{"s":0,"t":2.2,"r":1},
"tr":{"s":2.3,"t":1.5,"r":1},
"addhop":{"s":4,"t":1.2,"r":3},
"addmalt":{"s":5.5,"t":1.4,"r":1},
"boil":{"s":7.1,"t":1.2,"r":1},
"boilend":{"s":8.6,"t":1.2,"r":1},
"bye":{"s":10,"t":2,"r":1},
"chill":{"s":12,"t":1.2,"r":3},
"cool":{"s":13.5,"t":1.2,"r":2},
"iodine":{"s":15,"t":2,"r":3},
"maltin":{"s":17,"t":1.4,"r":3},
"mashout":{"s":18.5,"t":1.4,"r":1},
"nmash":{"s":20,"t":2,"r":1},
"removemalt":{"s":22,"t":1.6,"r":3},
"whirlpool":{"s":24,"t":1.3,"r":2},
"disc":{"s":25.5,"t":1.6,"r":2}}
}

“src” specifies the source of the audio file. It doesn’t have to be on the controller. It can be a HTTP URL, and you can put it anywhere that can be assess by your browser. (If your audio file is larger than 150k, you might need to put it anywhere else instead of the controller.)

“seg” sepcifies the voices:

  • “s”: start of the audio, by seconds
  • “t”: duration of the audio, by seconds. Use 0 if not used.
  • “r”: times of repeat.

The meaning of the tags:

 

tag When Example
open Successfully connecgted BrewManiac, at your service
tr Setting temperature reached. Temperature reached.
addhop reminder of adding hop Time to add hop
addmalt reminder of adding malt Time to add malt
boil Boiling phase starts start boiling
boilend Finish boiling boiling finished
bye brew finished. brew finished. goodbye.
chill reminder of chilling for hopstand start chilling
cool start of cooling stage time to cool
iodine reminder of iodine test Time for iodine test
maltin temperature reaches mash-in temperature ready to doughing-in
mashout start of mashout start mash out
nmash proceed to next mash steop continue to next mash step
removemalt reminder of removing malt Time to remove malt
whirlpool reminder of whirlpool starts time to whirlpool
disc connection disconnected Controller disconnected

 

Guideline/tips of audio files

  • Keep the file as small as possible. It’s not concert recording, so use lowest sampling rate as possible.
  • If your audio file are larger than 150k, putting it on the controller might not work. (This might be issues of ESPAsyncWebServer/ESPAsyncTcp. Keep it as a known issue.)
  • There is a lag of playing audio on Safari. Around 200~250ms silence before(including) and after(not including) the audio segment is necessary to make it work better on Safari. For example, if the audio segment is 1 seconds and will be appended at time 15 seconds, you should insert a silence of 0.2 second before the real audio, and another 0.2 second of silence after the audio segment. Then, mark the segment start at 15 second with 1.2 duration.
  • OSX has text to speech built-in. You can type something like this to create a audio segment.
    >say -v "Samantha" "Hello, I am Siri."

    To output the audio to a file, add “-o” option, like “-o siri”.

  • oceanaudio is very good for creating the audio file. You can use it to
    • merge the audio segments
    • insert/delete silence space between segments
    • re-sample the audio to make it smaller
    • check the start and duration of the audio segment.

Multi-button in Web interface

multibutton

On iOS, you can just press the buttons simultaneously, and release at the same time. (Not tested on Android devices.)

Using mouse to press two or more buttons on laptops or desktops is trickier:

  1. Click (and hold) anywhere on the rectangle area around the buttons, but not on the buttons.
  2. Drag through the buttons. The buttons will be hiligh-lighted.
  3. Release the mouse on one of the button.
  4. Releasing the mouse outside the buttons will have no effect. Moving outside the rectangle area during dragging will also cancel the action.

Comments (66)

  1. Hi Vito, just finished building a setup yesterday and will try to hook it up to my grainfather tonight to do a test of the functionality.

    I’ve started thinking though, as i also have the alembic pot still accessory for the grainfather to see whether this could be adapted for distilling as well. Often distillation is run twice, with the first run basically running a “stripping run” at full blast, initial cleaning and volume reduction. This could be done manually quite easy with the current software i believe.

    But for the 2nd (and usually final) run, all the collected output from a few “stripping runs” is run, normally at full blast until the vapor temperature reaches a certain point (there’s an opening in the pipe coming from the dome for a thermometer to measure the vaportemp, which can be calculated to the abv% of the distillate)

    Depending the the abv or vapor temp one would like to slow things down a bit not ‘blend’ the various fractions too much (giving a better/higher yield).

    I only had a quick look at the code base and it is quite large, so any pointers as to where to start look more in depth would be awesome.

    You could drop me an email and perhaps i’ll be able to find some time to understand the code and see where these features could fit in. Or if you feel interested i could provide a typical flow chart and possibilities.

    Regards,
    Andreas

  2. This is what I understand, correct me if I am wrong.
    The controller heats the liquid until the temperature at the pipe reaches a set value.
    Then, the heating power should be lowered.

    The concept is simple, or I misunderstand. However, the “lower heating” is not a clear description.
    I don’t really know how it could be done except lowering the setting temperature.
    It is easier to control the temperature of liquid than “lowering” the heating. Yes, PWM can be done, and you can set the output to a lower value, like 50%.
    What if the temperature drops to 60 Celsius?

  3. You’re not wrong Vito, a secondary distillation is where one separates out methanol and other dangerous volatiles(foreshots), this evaporates first (lower boiling point), then comes the ‘heads’ which is a mix of foreshots and ethanol (smeared together), and then comes the hearts (‘good alcohol), although one can generally mix in a bit of the other fractions for flavour/aroma. (last one is referred to as tails, which tends to be bitter in flavour)

    depending on the amount of liquid in the boiler, a distiller typically discards x amounts of ml, which are foreshots. but at this point, to make the separation between the different fractions more distinguished, one would at the start of the output pwm to a certain % pwm, and once the stage reaches a different temperature in the vapor, the boiler would change to a different % pwm.

    Now these are not always the same, you might want to separate differently if you are to distill a smoky whiskey vs a clean whiskey, or if you are distilling a fruit brandy etc.

    But this is what would lend to automating, just like mashing profiles, one could have distilling profiles

    Example pseudo code
    Start of heater ->
    If temperature => 55degrees C //part of automation/recipe, although 55 is a good start to turn on cooling water
    Display(“turn on cooling water”)
    sleepUntil(WaitForUserAcknowledge();); //turn off heater as this is important
    set pwm(50%) // part of automation/recipe
    Display(“Remember to discard foreshots (x ml) //where x is also part of the automation/recipe

    if temperature => 83degrees C //start of hearts fraction, part of automation/recipe
    Display(“start collecting hearts”)
    set pwm(70%) // part of automation/recipe
    if temperature => 90degree C //Start of tails fraction, part of automation/recipe
    Display(“start collecting tails”)
    set pwm(100%) // part of automation/recipe
    If temperature => 98degree C //Then the amount of ethanol left in the boiler is very small so the water/power effort isn’t perhaps worth the trouble. (this could be part of automation/recipe)
    set pwm(0%)
    Display(“Distillation is done”)

    The actual functionality and control is not very complex at the most basic, but getting into another persons code is a bit tricky, which was why i wanted to pull it by you to see what you think

  4. Are the temperatures liquid temperature?

    The process seems simpler than beer brewing. However, in beer brewing, the controller controls only temperatures.
    PWM is used only after boiling temperature reaches. Off course it’s not difficult to change the code from PID to PWM.
    The problem is that 50% heating power might gets different results in the winter and summer.
    If you distill outdoors in chilling weather, the temperature might even drops. I think that can be handled by correct temperatures.

    heaterControl() in BrewManiac.ino(it will be rename to BrewManiac.cpp in next release, mainly for PlatformIO.) is the code you need
    to look at. It is where PID and/or PWM is applied.

    I have seen some distiller, and none of them has pump. Therefore, the pump control might be used for “chilling” by either pumping cold water or turning on the solenoid that controls the flow of cold water. That would make the process more automatic.

    The procedure is simple. I would suggest you don’t mess with manual or automatic mode, buy you can reference automatic mode. ( I am sorry that the part of code is the worst code I ever had, because I was not familiar with Arduino and avoided using C++ for memory issue.)

    BTW, a few months ago, a friend asked me about distilling. Is that you?

  5. Hey Vito, no, all the temperatures are read from the vapour (sensor in the copper dome condenser). So it’s not very interesting to control the actual temperature in the boiler, only the speed of heating.

    I had a look at heatingControl() and i think perhaps its more straightforward to add a distillingControl() that could be chosen initial at startup instead of manual and auto. I’ll have a look at how the various variables are named and how multiple sensors are handled. But first i need to try out and brew a beer (or a few) with the stock version to see wether it works properly or not. If i get time over to start coding, i’ll try to do so in a way that it could be merged to your codebase and if not enabled through config.h (or similar) the extra code won’t be affecting the default running code.

    And no, i don’t think i was that friend who asked about distilling. It’s illegal in most countries 😉

  6. In version 0.3, the sparge heating function is NOT available by default.
    You have to turn on the compile options.

    However, that won’t result in connection failure. There might be some other problems.

  7. Vito, where turn compile option?
    If I upload your bin-file BrewManiacEx.multisensor.023.bin, not work temperature sensor, temperature always 100.75C.

  8. Vito, thanks!
    I find parameters and change, compile, upload – not work. Temp always 100.75.

    I’m return to simplesensor.
    Best regards.

  9. Hi Vito, I had this problem when I was update firmware of my controller using system update by Chrome.
    Error:Server not Report Size.
    Do you know what I can do to solve this? I searched but did’n find the .bin of version 0.3 on github reporitory, just 0.2.3 version.
    Tks!

  10. I forgot to add the binaries. Now they are on GitHub. Please check again.

    The web server starts to discarding the content-length field a few months ago.
    The on-line update relies on the content-length, so it doesn’t work for now.
    BTW,
    I found that updating of HTML/Javscript sometimes doesn’t work either.

    The web hosting service is so cheap that they don’t provide easy access customer service.
    Before I move it to other hosting, just download the binary and update manually.

  11. Hello Vito, What IDE version do you recommend to use? I’m dealing with some upload issues (fatal error: avr/interrupt.h: No such file or directory).

  12. Woah, you’re a machine Vito 🙂

    I’ll clone the branch and diff to the 0.3 tag to see what’s been added and if needed i’ll try to refine, and perhaps have a fork available for those looking to add distilling features 🙂

    I’ll try out the tag with some water!

    /Andreas

  13. It might be easier to search the following options
    SupportDistilling
    PwmHeatingSupport

    Arduino IDE is used for old 0.3, and the new branch is using PlatformIO.

  14. Wow… it’s so smooth with PlatformIO. Just FYI, #define EnableMultiSensor is missing in the distilling branch – I guess it’s specific for distilling.

  15. Check the manual for detail:
    https://github.com/vitotai/BrewManiacEsp8266/blob/master/docs/BrewManiacExManual_0.3.pdf

    In a nutshell, you can specify which(or both) heater to use during different stages: pre-mash, mashing, boiling, post-boil.

    For general SINGLE kettle e-BIAB, you can use secondary heater to help heating mashing water and boiling. In which, you will set BOTH heaters on during Pre-Mash and Boiling stage, and only one heater during mashing and post-boil.
    For 3-kettle HERMS system, check my other post http://vito.tw/?p=710

    You will need an additional SSR to control the heater. It is controlled by D8 by default.You might need to avoid overloading the power, though.

  16. Man, oh man, what a beautiful work!
    I am quite new to microcontrollers and one of the things that I find most amazing is how people are generous in sharing great stuff on that field. Thank you for that!

  17. Hi Vito. Many thanks for your firmware. I use your program for a year. It allowed me to save a lot of time and automate the process of brewing beer. I also use the distillation function. Could you correct the time delay when setting the temperature in the web interface in manual mode (also PWM level in the distillation mode). When I repeatedly press the button up or down, the temperature in the corresponding field changes after 10-20 seconds.

  18. There is no such delay. It’s the overhead of HTTP request or the implementation of the browser.

    Nothing I can do to improve the latency except changing to use WebSocket instead of ServerSideEvent.
    However, I’ve tried WebSocket, and it was not stable at that time. Sometimes Safari, the browser, even crashed. (I hate the new interface of WireShark and miss Ethereal, so I didn’t dig into that issue.)
    It was over one year ago, and I have been thinking about trying WebSocket again. It just takes time to verify and test the stability and compatibility. I am in a one-man team and frequently distracted by other stuff…

    Would you share your experience about distilling? I don’t have equipment for distilling and I don’t distill. The logic is a result of discussion with Andreas, in previous comments. I wonder how it works.

  19. Vito, thanks for reply. I’ll try to use another browser (it was a google chrome before).
    Latency in manual mode is not so critical. I use manual mode to pre-clean the brewery (boiling with soda) before mashing in automatic mode.
    For distilling I use the same equipment with distillation column.
    In my experience distillation process is easy than brewing, but it is more difficult to automate.
    In common, the process of distillation is divided on two stages. The first stage consists in rapid distillation of the sugar (or malt) brew at the maximum power of the heater. At that stage we obtain dirty alcohol. So brewery (50l with 2.5kW heater) work at 100% PWM. Water supply to the refrigerator (pump control), when temperature in top of column reached 35-40C. When temperature in top of column reached 97C the first stage end. At that stage I use automatic brew mode with zero mashing time and switch pump to inverted mode (“pump stop temperature” set to 35-40C).
    Fraction distillation of dirty alcohol is carried out at the second stage. The second stage is rather difficult to automate. I use distill manual mode. The first brewery works at 100% PWM. Program signaling me when temperature in top of column reached 35C. Next I control process of distillation by myself. At that stage it is impossible to rely on the thermometer. I control the output of alcohol and the selection of head (and other) fractions by adjusting water flow in refrigerator and the power of the heater (PWM).
    So it is my distillation experience. Maybe other people have another way of distilling.

  20. Thank you for your sharing.

    I am upgrading to latest ESPAsyncWebServer and verifying WebSocket which should make buttons more responsive. It is also possible to implement continuous button press, which might result in massive HTTP request under current ServerSideEvent architecture.

    I found a bug that affect the update of setting temperature. By design, the setting temperature should be updated when it is changed, but the bug delay the update of setting temperature. I will update it later.

  21. Many Thanks Vito. I’m looking forward to the update.
    I’m sorry. I’m forget about another bug in distillation mode. I can’t turn on pump in distillation mode. In brew mode pump can be controlled by button or via web. After enabling device power and entering distillation mode, pump button not working. I need to enter any brew mode (automate or manual) and press pump button. After that I can turn on pump in distillation mode by pressing the button.

  22. Hi Vito. I tested firmware (v040pre) for brewing beer. There is no latency on setting temperature and heater PWM via web interface (google chrome, opera). And now pump button work in distilling mode.
    Thank you for your job!

  23. Hi Vito. Second using manual distillation mode show that pump button not work. Need to start any brew mode first. After that pump button in manual distillation mode become functional. Also chart in distilling mode show only last measure. It is a little strange, because after ESP flash programming with 040pre firmware all works correct.

  24. Another stuff. In distillation mode buzzer make beep when temperature reached 35C. It is possible to change that temperature?

  25. It should be a bug for PWM mode. I will fix it later.
    update: Long press Heat to change setting temperature.

  26. Thanks for reply. I using and testing 040pre version. It’s not critical offcourse.
    Thank for advise about temperature.

  27. hello Vito,

    When i compile the code and upload, give this error…
    invalid user-defined conversion from ‘IPAddress’ to ‘uint8_t* {aka unsigned char*}’ [-fpermissive]

    Can you help me ?

  28. i installed atom to environment. Iam sorry but i new in this, and i liked a lot your project to automation for my biab keg… thanks for your answers.

    When i upload platformio project i have this error :

    — v1.0
    | |– v1.0
    | |– v1.0
    | | |– v1.0
    Linking .pioenvs\nodemcuv2\firmware.elf
    Checking program size
    text data bss dec hex filename
    480251 14588 35064 529903 815ef .pioenvs\nodemcuv2\firmware.elf
    Building .pioenvs\nodemcuv2\firmware.bin
    Configuring upload protocol…
    Looking for upload port…
    Auto-detected: COM4
    Uploading .pioenvs\nodemcuv2\firmware.bin
    warning: espcomm_sync failed
    error: espcomm_open failed
    error: espcomm_upload_mem failed
    *** [upload] Error -1
    [ERROR] Took 18.73 seconds

    [SUMMARY]
    Environment nodemcuv2-multisensor [SKIP]
    Environment nodemcuv2 [ERROR]
    [ERROR] Took 18.73 seconds

  29. The code was built successfully, but upload failed.
    You might try again, and again. Or, try push reset or flash button if the board has it.
    Otherwise, return the ESP8266 and buy another one.

  30. Helo vito, thank you very much for your tips. Now i successfully installed Brewmaniac 0.4, on Nodemcu esp8266.

    Can i ask you, wich type of AC/DC Switched font you use for the project ? I use a Solenoide Gas Valve to heat the kettle, and reles are both 5V 10A. The pump is from a Washing machine. :P.

    I was thinking that a DC 5V 2A wall charger power its enough.

  31. I use 5V/2A power supply.
    https://www.ebay.com/itm/AC-110V-220V-TO-DC-5V-12V-24V-Switch-Power-Supply-Driver-Adapter-LED-Strip-Light/152134115704

    It seems to work find for me. I have heard that most cheap USB 5v chargers are not stable. You might need to be careful. (BTW, I just learned from Homebrewtalk.com that bad power supply might result in disconnection of temperature sensors.)

    I know nothing about Solenoid Gas Vale, although I am very interested. Would you share some detail about it?

  32. Hi Vito, thank you for your project, it works perfectly! Could you just tell me if it’s possible to make pump work periodically in auto mode because in a continuous mode pump is working too much, moreover my needs.
    Although version 033 isn’t saving setup entered by a keyboard but it’s okay through the www site.

  33. Conti, Vito just updated the code, so now the settings are saved using the buttons/keyboard interface

  34. Hello Vito,
    I’m trying to compile but I’m getting this error:

    In file included from sketch/BrewManiac.cpp:18:0:
    pins.h:76: error: ‘PCF8574’ does not name a type
    PCF8574 pcf8574(PCF8574_ADDRESS,I2C_SDA, I2C_SCL);
    ^
    sketch/pins.h: In function ‘void btnPrepareRead()’:
    pins.h:92: error: ‘pcf8574’ was not declared in this scope
    _portvalue=pcf8574.read8();
    ^
    In file included from sketch/BrewManiac.cpp:342:0:
    sketch/ui.h: In function ‘void uiScanLcdAddress()’:
    ui.h:302: error: ‘class LiquidCrystal_I2C’ has no member named ‘updateAddress’
    lcd.updateAddress(address);
    ^
    exit status 1
    ‘PCF8574’ does not name a type

    It’s like this in “Pins.h”:

    #if (BUTTON_USE_EXT == true) || (HEATER_USE_EXT == true) || (PUMP_USE_EXT == true) ||( BUZZER_USE_EXT == true)
    PCF8574 pcf8574(PCF8574_ADDRESS,I2C_SDA, I2C_SCL);
    #endif

    I’m using Arduino IDE, I just changed “BrewManiacEx.cpp” to “BrewManiacEx.ino”. It was working until months ago, but now I’m stuck in this error.

    I have not had time to meet Plataformio yet.

  35. Hello Vito,
    First of all, thanks for your help and patience.
    I switched to PlatformIO. I think it’s all set up as it should. I downloaded and added the project folder in the IDE. I compiled it once successfully, but now I’m getting it:
    [Mon Mar 12 09:05:40 2018] Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)

    ——————————————————————————–
    Verbose mode can be enabled via `-v, –verbose` option
    PLATFORM: Espressif 8266 > NodeMCU 1.0 (ESP-12E Module)
    SYSTEM: ESP8266 80MHz 80KB RAM (4MB Flash)
    Library Dependency Finder -> http://bit.ly/configure-pio-ldf
    LDF MODES: FINDER(chain) COMPATIBILITY(light)
    Collected 36 compatible libraries
    Scanning dependencies…
    Dependency Graph
    |–
    |– v5.3.0
    |– v1.1
    | |– v1.1
    | | |– v1.0
    | |– v1.0
    |– v1.1
    | |– v1.0
    |– v1.0
    | |–
    | | |– v1.0
    | |– v1.0
    |– v3.2.3
    | |– v1.0
    |–
    | |– v1.0
    |– v1.0
    | |– v1.0
    |– v1.0
    |–
    |– v1.1.0
    | |– v1.0

    |–
    | |–
    | | |– v1.0
    | |– v1.0
    | |– v1.0
    | |– v5.3.0
    |– v1.0
    |– v1.0
    |– v0.12
    | |– v1.0
    | | |– v1.0
    | |– v1.1.0
    | | |– v1.0
    | |– v1.0
    |– v1.0
    |–
    |– v3.3.1
    |–
    | |– v1.0
    |– v1.0
    | |– v1.0
    | |– v1.0
    | | |– v1.0
    |–
    | |– v1.0
    |– v1.0.0
    | |– v1.0
    Compiling .pioenvs/nodemcuv2/lib08a/ESPAsyncTCP-master/ESPAsyncTCP.cpp.o
    Compiling .pioenvs/nodemcuv2/libc28/ESPAsyncWebServer-master/WebResponses.cpp.o
    Compiling .pioenvs/nodemcuv2/libc28/ESPAsyncWebServer-master/WebServer.cpp.o
    Compiling .pioenvs/nodemcuv2/lib202/WiFiManager/WiFiManager.cpp.o

    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp: In constructor ‘AsyncClient::AsyncClient(tcp_pcb*)’:
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:71:28: error: invalid conversion from ‘int8_t (*)(void*, tcp_pcb*, pbuf*, int8_
    t) {aka signed char (*)(void*, tcp_pcb*, pbuf*, signed char)}’ to ‘tcp_recv_fn {aka long int (*)(void*, tcp_pcb*, pbuf*, l
    ong int)}’ [-fpermissive]
    tcp_recv(_pcb, &_s_recv);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:318:18: error: init
    ializing argument 2 of ‘void tcp_recv(tcp_pcb*, tcp_recv_fn)’ [-fpermissive]
    void tcp_recv (struct tcp_pcb *pcb, tcp_recv_fn recv) ICACHE_FLASH_ATTR;
    ^
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:72:28: error: invalid conversion from ‘int8_t (*)(void*, tcp_pcb*, uint16_t) {a
    ka signed char (*)(void*, tcp_pcb*, short unsigned int)}’ to ‘tcp_sent_fn {aka long int (*)(void*, tcp_pcb*, short unsigne
    d int)}’ [-fpermissive]
    tcp_sent(_pcb, &_s_sent);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:319:18: error: init
    ializing argument 2 of ‘void tcp_sent(tcp_pcb*, tcp_sent_fn)’ [-fpermissive]
    void tcp_sent (struct tcp_pcb *pcb, tcp_sent_fn sent)ICACHE_FLASH_ATTR;
    ^
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:73:28: error: invalid conversion from ‘void (*)(void*, int8_t) {aka void (*)(vo
    id*, signed char)}’ to ‘tcp_err_fn {aka void (*)(void*, long int)}’ [-fpermissive]
    tcp_err(_pcb, &_s_error);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:321:18: error: init
    ializing argument 2 of ‘void tcp_err(tcp_pcb*, tcp_err_fn)’ [-fpermissive]
    void tcp_err (struct tcp_pcb *pcb, tcp_err_fn err)ICACHE_FLASH_ATTR;
    ^
    Compiling .pioenvs/nodemcuv2/lib202/WiFiManager/WiFiManager.cpp.o

    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp: In constructor ‘AsyncClient::AsyncClient(tcp_pcb*)’:
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:71:28: error: invalid conversion from ‘int8_t (*)(void*, tcp_pcb*, pbuf*, int8_
    t) {aka signed char (*)(void*, tcp_pcb*, pbuf*, signed char)}’ to ‘tcp_recv_fn {aka long int (*)(void*, tcp_pcb*, pbuf*, l
    ong int)}’ [-fpermissive]
    tcp_recv(_pcb, &_s_recv);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:318:18: error: init
    ializing argument 2 of ‘void tcp_recv(tcp_pcb*, tcp_recv_fn)’ [-fpermissive]
    void tcp_recv (struct tcp_pcb *pcb, tcp_recv_fn recv) ICACHE_FLASH_ATTR;
    ^
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:72:28: error: invalid conversion from ‘int8_t (*)(void*, tcp_pcb*, uint16_t) {a
    ka signed char (*)(void*, tcp_pcb*, short unsigned int)}’ to ‘tcp_sent_fn {aka long int (*)(void*, tcp_pcb*, short unsigne
    d int)}’ [-fpermissive]
    tcp_sent(_pcb, &_s_sent);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:319:18: error: init
    ializing argument 2 of ‘void tcp_sent(tcp_pcb*, tcp_sent_fn)’ [-fpermissive]
    void tcp_sent (struct tcp_pcb *pcb, tcp_sent_fn sent)ICACHE_FLASH_ATTR;
    ^
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:73:28: error: invalid conversion from ‘void (*)(void*, int8_t) {aka void (*)(vo
    id*, signed char)}’ to ‘tcp_err_fn {aka void (*)(void*, long int)}’ [-fpermissive]
    tcp_err(_pcb, &_s_error);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:321:18: error: init
    ializing argument 2 of ‘void tcp_err(tcp_pcb*, tcp_err_fn)’ [-fpermissive]
    void tcp_err (struct tcp_pcb *pcb, tcp_err_fn err)ICACHE_FLASH_ATTR;
    ^
    ^
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:255:31: error: invalid conversion from ‘int8_t (*)(void*, tcp_pcb*) {aka signed
    char (*)(void*, tcp_pcb*)}’ to ‘tcp_poll_fn {aka long int (*)(void*, tcp_pcb*)}’ [-fpermissive]
    tcp_poll(_pcb, &_s_poll, 1);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:320:18: error: init
    ializing argument 2 of ‘void tcp_poll(tcp_pcb*, tcp_poll_fn, u8_t)’ [-fpermissive]
    void tcp_poll (struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval)ICACHE_FLASH_ATTR;
    ^
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp: In member function ‘void AsyncServer::begin()’:
    lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:638:29: error: invalid conversion from ‘int8_t (*)(void*, tcp_pcb*, int8_t) {ak
    a signed char (*)(void*, tcp_pcb*, signed char)}’ to ‘tcp_accept_fn {aka long int (*)(void*, tcp_pcb*, long int)}’ [-fperm
    issive]
    tcp_accept(_pcb, _s_accept);
    ^
    In file included from lib/ESPAsyncTCP-master/src/ESPAsyncTCP.cpp:27:0:
    /Users/matheus/.platformio/packages/framework-arduinoespressif8266/tools/sdk/lwip/include/lwip/tcp.h:317:18: error: init
    ializing argument 2 of ‘void tcp_accept(tcp_pcb*, tcp_accept_fn)’ [-fpermissive]
    void tcp_accept (struct tcp_pcb *pcb, tcp_accept_fn accept) ICACHE_FLASH_ATTR;
    ^
    *** [.pioenvs/nodemcuv2/lib08a/ESPAsyncTCP-master/ESPAsyncTCP.cpp.o] Error 1
    ========================== [ERROR] Took 5.66 seconds ==========================
    Environment nodemcuv2 [ERROR]
    ========================== [ERROR] Took 5.66 seconds ==========================

    ================================== [SUMMARY] ==================================
    Environment nodemcuv2-multisensor [SKIP]

  36. Ok, I was able to compile successfully. I just downloaded the ESPAsyncTCP-master library straight from the source and replace the files in “lib”
    TKS!!

  37. Hello Vito,
    Apparently I am able to save configuration values by buttons and LCD. But I’m not picking up and editing through the web interface.
    I tried the two repositories, v0.4 and v0.3. Am I missing any detail?

  38. The pump have been already working as i planned but still i cant save configuration values by buttons and LCD although its working through interface in v0.4 and v0.33. Just the v0.3 saves properly by buttons.

  39. Some one have the previous version (V0.3) to share? For me V0.3 have no issues, but I missed the project folder.

  40. Hi all,
    I just compile with platform = espressif8266@~1.5 and now all fine here. Like Vito says but i don’t give a proper attention. Tsk Vito!

  41. v3.3 already writes ok, but v4 from the master directory and pwm does not save using the buttons

  42. I am thinking about this. The reasons I haven’t finished it are because
    1, I’ve submitted a issue of AsyncTCP and waiting for response.
    2, The latest framework(1.6) with latest libraries seem to be less stable than old one.

    I have used it to brew twice or three times and it seems to work fine. Maybe after a few touchups, I will release it. It’s a pain to maintain multiple branches.

  43. Hello Vito!

    When i access to the program via chrome or firefox , i have this message :

    BrewManiac is not in idle state . – from bm.local

    And in the start of the app i have a connection error :

    The connection to BrewManiac is down. It might be wireless issue or ESP8266 issue. Check your Brew ASAP.

    Please, i would be very apreciated if you can help on this one.

    thanks very much.

Leave a Reply

Your email address will not be published. Required fields are marked *